聖刻の里

趣味や日常について自由に語る日記です。

【語学】気ままに学ぶフランス語PART1-1:フランス語の発音ルールとアルファベットについて

f:id:scarlet09Libra:20210406171836j:plain
 

どうもLibraです。

 

 突然ですが新シリーズ「気ままに学ぶフランス語」を始めますヽ(*^ω^*)ノ。私自身はフランス語ペラペラでもフランスに在住経験があるわけでもないですが、趣味でフランス語を勉強していて、その学習記録をブログとしてシェアしていこうと思います。フランス語を勉強している(興味がある)方々に少しでも役に立てれば幸いです。

 今回のテーマは、フランス語の簡単な発音ルールの解説とアルファベットです。

 

  

フランス語のアルファベット 

アルファべ

 フランス語のアルファベットは英語と全く同じです。フランス語でアルファベットの綴りは「Alphabet」で、「アルファべ」と読みます。

 アルファべの他に「合字」というものがあり、フランス語で使われる合字は「Æ/æ」「Œ/œ」です。それぞれ「」「」の発音を表します(厳密にいうと「エ」「ウ」とは少し違いますが、頻出する字ではないので最初は深く考えなくてもいいでしょう)。

A B C D E F G H I J K
a b c d e f g h i j k
エフ ジェ アッシュ
L M N O P Q R S T U V
l m n o p q r s t u v
エル エム エヌ キュ エール エス ヴェ
W X Y Z
w x y z
ドゥヴルヴェ イクス イグレック ゼッド

 

綴り字記号

 フランス語には上記のアルファベット以外に、 綴り字記号というものがあります。アクセント記号のように見えるものもありますが、(英語のような)強く発音せよ!という意味の記号ではなく、同音異義語や読み方の区別のために使われます。アクサン・テギュ、アクサン・グラーヴ、アクサン・スィルコンフレックスはまとめてアクサン記号とも呼ばれます。

 綴り字記号の種類と簡単な使用例をまとめてみました。ただし、発音の例外も多く深掘りすると結構ややこしいので、現状は簡単に理解しておく程度でいいでしょう。

accent aigu
(アクサン・テギュ)
é été【エテ】
accent grave
(アクサン・グラーヴ)
è mère【メール】
à là【ラ】 そこに、ここに
ù où【ウ】 どこで、どこへ
accent circonflexe
(アクサン・スィルコンフレックス)
â château
【シャトー】
ê tête【テットゥ】
î dîner【ディネ】 夕食
ô hôtel【オテル】 ホテル
û flûte
【フリュートゥ】
フルート
tréma
(トレマ)
ë Noël【ノエル】 クリスマス
ï maïs【マイス】 トウモロコシ
ü Saül【サウル】 サウル(人名)
cédille
(セディーユ)
ç français
【フランセ】
フランス語
フランス人

 

accent aigu (アクサン・テギュ)

 アクサン記号の中で最も出現頻度が高く、「é 」は「エ」と発音します。本来、「e」は「ア」「エ」や発音しなかったりと、多くの読み方がありますが(漢字に似てますね)、 「e」の上にアクサン・テギュをつけて「é」とすることで、読み方を「エ」に固定化する役割を担っています。

 

accent grave(アクサン・グラーヴ)

  発音については、「à」「ù」はアクサン記号のない「a」「u」と同じです。「è」は(多少の例外はありますが)「エー」と伸ばすように発音することが多いです。

 「à」と「ù」の発音が変わらないならこの記号は何のためについてるの?と思われたかもしれません。当然意味もなく付いているわけではなく、こいつらは同音異義語の区別に使われます。例えば、「もしくは」という意味の「ou」と、「どこ」という意味の「où」は、発音は同じですがアクサン記号がついているかどうかで意味は全く変わってきます。

 

accent circonflexe(アクサン・スィルコンフレックス)

 「ê」の発音はほぼアクサン・テギュと同じ、そのほかに関しても通常の「a」「i」「o」「u」の発音とほぼ同じです。ただし、アクサン・テギュのように発音を固定化する場合もあれば、アクサン・グラーヴのように同音異義語の区別に使われる場合もあり、発音のルールにパターンがないため少し難しいです(英語のように綴りと発音を暗記する方がいいでしょう)。

 ここでアクサン・スィルコンフレックスを使う背景の話をしましょう。昔のフランス語では「s」を用いていた単語がありましたが、時代の流れとともに「s」の部分を読まなくなり、その結果、綴りからも消えていきました。「s」を消したことをわかるようにするため、母音にアクサン・スィルコンフレックスをつけるようになったのです。動詞であれば、その活用形を見てみると原型にはない「s」が出現したりするので、探してみると面白いかもしれません。

 

tréma(トレマ)

  フランス語では2つ以上の母音が合わさって1つの母音を示す複母音というものがあります(あとで詳しく説明します)。トレマをつけると、複母音をバラバラにして別々に読みなさい!という意味になります。

 例えば、「俳句」をフランス語では「haïku」と書きますが、「haiku」と書いてしまうと、「ai」はフランス語で「エ」と発音するので「エク」となってしまいます(フランス語ではhを発音しない)。トレマをつけて「ai」をバラバラに読むことで「haïku」は「アイク」と読めるわけですね。

 ちなみに、トレマは「前の母音とバラバラに読んでくれ」という意味なので、普通は複母音の最後にくっついています。

 

cédille(セディーユ)

 「サ行」の発音を表します。簡単ですね。

 

最後にそれぞれの発音をまとめてみましたので確認しておきましょう。

accent aigu
(アクサン・テギュ)
é
accent grave
(アクサン・グラーヴ)
è エー
à aと同じ
ù uと同じ
accent circonflexe
(アクサン・スィルコンフレックス)
â aと同じ
ê éと同じ
î iと同じ
ô oと同じ
û uと同じ
tréma
(トレマ)
ë 前の母音とバラバラに読む
ï
ü
cédille
(セディーユ)
ç サ行

 

 

母音と子音の発音

母音

 フランス語の母音は下記の6個に加えて、複母音が5個、鼻母音が5個、半母音が3個あります。それぞれ見ていきましょう。

a 【ア】 avril【アブリル】 4月
e 【ウ】 demain【ドゥマン】 明日
【エ】 aimer【エメ】 好む
無音 samedi【サムディ】 土曜日
i 【イ】 il【イル】 彼は
o 【オ】 onze【オンズ】 11
u 【ユ】 université
【ユニヴェルスィテ】
大学
y 【イ】 y【イ】 そこで

 

複母音

 2つ以上の母音が連続してできる母音を複母音といいます。それぞれ読み方が決まっているのでまとめて覚えてしまいましょう。

ai 【エ】 saison【セゾン】 季節
ei Eiffel【エッフェル】 エッフェル
au 【オ】 restaurant
【レストラン】
レストラン
eau beaucoup【ボークー】 とても
ou 【ウ】 oui【ウイ】 はい
oi 【オワ】 trois【トロワ】 3
eu 【ウ】 Europe【ウーロップ】 ヨーロッパ
œu œuvre【ウーブル】 作品

 

鼻母音

 フランス語の特徴的な母音ですが、幸い日本語にも鼻母音が存在するため、日本人にとって発音するのは比較的容易です。こちらも読み方を覚えてしまいましょう。

an 【アン】 blanc【ブラン】 白い
am jambe【ジャンブ】
en enfant【アンファン】 子供
em ensemble
【アンサンブル】
一緒に
in 【アン】 Chopinショパン ショパン
im simple【サンプル】 簡単な
ain pain【パン】 パン
ein plein【プラン】 いっぱいの
un 【アン】 lundi【ランディ】 月曜日
um parfum【パルファン】 香水
on 【オン】 long【ロン】 長い
om compagnon
【コンパニョン】
仲間
ien 【イヤン】 client【クリヤン】 顧客

 

半母音

 フランス語には二重母音がありません(二重母音とは英語の「ice」の「アイ」のような異なる母音が連続して一つの音節を成すもの)。二重母音になり得る綴りが登場した場合、フランス語では連続する母音の一部のみが母音として残り、それ以外は子音として発音されます。

 半母音としては3つの発音がありますが、今回はその3つに加えて頻出する「子音 + ill」「oi/oy」の合計5つの発音を見ていきます。

ou + 母音 【ワァ行】 ouest【ウェストゥ】 西
u + 母音 【ユァ行】 nuit【ニュイ】
i + 母音 【ユ】 piano【ピヤノ】 ピアノ
母音 + il/ill soleil【ソレイユ】 太陽
子音 + ill 【イユ】 famille【ファミーユ】 家族
oi 【ワ】 trois【トロワ】 3
oy voyage
【ヴワイヤージュ】
旅行

 

子音

 子音の発音は以下の通りです。 

b バ行 bonjour
【ボンジュール】
こんにちは
c サ行 chambre
【シャンブル】
部屋
カ行 café【カフェ】 コーヒー
d ダ行 deux【ドゥ】 2
f ファ行 fleur【フルール】
g ジャ行 page【パージュ】 ページ
ガ行 gare【ギャール】
h 発音しない histoire
【イストワール】
歴史
j ジャ行 Japon【ジャポン】 日本
k カ行 parking【パーキング】 駐車場
l ラ行 livre【リーブル】
m マ行 mer【メール】
n ナ行 noir【ノワール 黒い
p パ行 pays【ペイ】
q カ行 quatre【キャトル】 4
r ラ行 rouge【ルージュ】
s ザ行 saison【セゾン】 季節
サ行 soir【ソワール】 夕方
t タ行 table【ターブル】 テーブル
v ヴァ行 vin【ヴァン】 ワイン
w ヴァ行 wagon【ヴァゴン】 車両
ワ行 whisky【ウイスキー ウイスキー
x エクス texte【テクスト】 テキスト
dix【ディス】 10
z ザ行 jazz【ジャズ】 ジャズ

 

複合子音

 英語やドイツ語と同じくフランス語にも複合子音(特定の子音が連続することで別の音になる)があります。しかし英語やドイツ語とは読み方が異なるので、これも覚えてしまいましょう。

ch シャ行 chocolat
【ショコラ】
チョコレート
gn ニャ行 champagne
シャンパーニュ
シャンパ
ph ファ行 photo【フォト】 写真
th タ行 thé【テ】 お茶

 

 

さいごに

 本当はパート1でアルファベットと発音、簡単な読み方のルールとリエゾンアンシェヌマン、エリジョンといった内容を書きたかったのですが、アルファベットと発音の解説の時点で結構なボリュームになってしまったので、今回はここまでにしておこうかなと思います。

 パート1は1-1と1-2で2分割し、1-2では今回説明できなかった読み方のルールと、リエゾンアンシェヌマン、エリジョンについて書いていこうと思います。

 フランス語は読み方のルールが多く最初は大変ですが、一度ルールを覚えてしまえば(英語に比べれば)例外が少なく、スムーズに読めるようになると思うので共に頑張りましょう(=゚ω゚)ノ

 

f:id:scarlet09Libra:20210406172336p:plain

【まほよめ】アニメ新プロジェクト始動!魔法使いの嫁2期はもうすぐかも!?

f:id:scarlet09Libra:20210318164501j:plain

 

どうもLibraです。

 

 2021年3月10日にて、「魔法使いの嫁」のアニメ新プロジェクト始動の情報が告知されました(詳細は下記リンクを参照)。新作エピソード「魔法使いの嫁 西の少年と青嵐の騎士」が全3部作のOADとして制作開始とのことですが、公開されたPVを見てみると(わりと最新の)学院篇のシーンが所々折り込まれていて、「もうすぐ2期くるのか!?」と1人で胸を躍らせています。

 というわけで、今回はアニメ2期にむけて(ネタバレしない程度の)学院篇の登場人物の紹介と、2期制作の現実性について書いていこうと思います。

 

natalie.mu 

www.youtube.com 

 

【目次】

  

学院篇の登場人物

 学院篇は登場人物が多く覚えるのが大変なので、ネタバレしない程度の相関図にまとめてみました。この内容さえ押さえておけば、まほよめ2期の視聴準備は整ったと言って差し支えないでしょう。

f:id:scarlet09Libra:20210318163235p:plain

キャラクター相関図

 

アニメ2期はくるのか

 個人的に2期制作は現実的なものだと思っています。1期の円盤は1巻 ~ 4巻ありますが、その全てが5,000枚以上売れていますし(2期制作ラインは大体5,000枚以上)、原作ストックも十分溜まっていますからね。一つ懸念があるとすれば、学院篇の終わりがまだ見えないのでアニメとしての区切りが難しいことでしょうか。1期のラストと同じように、アニメの方で漫画よりも一瞬早く最新話が放送される形になるかもしれませんね。

  私の勝手な予想ですが、学院篇の話が一区切りするタイミング(2022 ~ 2023年ぐらい?)でアニメ2期がくるんじゃないかなと思っています(てかきてくれ)。

 

さいごに

 学院篇の登場人物はまだまだたくさんいますが、とりあえず上の相関図の内容を頭に入れておけば問題ないでしょう。新作エピソード「魔法使いの嫁 西の少年と青嵐の騎士」も制作中とのことですので、今後の情報に注目ですね。

 

f:id:scarlet09Libra:20210311023828p:plain

【遊戯王】2021年4月リミットレギュレーションの感想

f:id:scarlet09Libra:20210315200934j:plain

 

どうもLibraです。

 

 今回は2021年4月から適応されるリミットレギュレーションが判明しましたので、そちらについて感想を書いていこうと思います。

 尚、カジュアルプレイヤーである私個人の感想なので、あまり深く捉えず軽い気持ちで読んでいただけると幸いです。

 

【目次】

 

リミットレギュレーション【2021年4月】

 

【禁止】

マジックテンペスター (無制限 → 禁止)

 

【制限】

真竜皇V.F.D. (無制限 → 制限)

 

【準制限】

EMドクロバット・ジョーカー (制限 → 準制限)

ファイアウォール・ドラゴン (制限 → 準制限)

ユニオン格納庫 (制限 → 準制限)

 

【解除】

オルターガイスト・メリュシーク (準制限 → 解除)
ジャンク・スピーダー (準制限 → 解除)
氷結界の虎王 ドゥローレン (準制限 → 解除)
継承の印 (準制限 → 解除)
閃刀機関-マルチロール (準制限 → 解除)
闇の誘惑 (準制限 → 解除)

 

全体を通しての感想

  (個人的に)今回の目玉はやはりメリュシーク解除でしょうか。オルターガイストはわりと好きでよくデッキを回してるので純粋に嬉しいですね。メリュシークが3枚になったところで劇的に強くなるわけではないですが、アクセスしやすくなるのは良いことかなと思います。メリュシーク以外では闇の誘惑も良いですね。使いやすいドロソはいろんなデッキでお世話になるので注目ポイントです。

 そして問題はV.F.D.ですね。直接禁止にしても文句を言う人はいないと思いますが制限カードにする意味あるんですかね。まあ私はカジュアル勢なのでV.F.D.に対してそこまで恨みはありませんが、ゲームをつまらなくするカードではあるので禁止にするなら早く禁止にして欲しいと思うところです(3ヶ月後には禁止になるでしょうね)。

 最後は完全に個人的なワガママ話になりますが、今回の改定を見た時「物足りないなー」と思ってしまいました。改定の内容に関して、V.F.D.以外は特に不満という不満はありませんが、環境は変わらなさそうですし(閃刀姫とオルターガイストが少し強くなるくらい?)、ワクワク感がイマイチ足りなかったです。例えば、V.F.D.禁止にするとかマスマティシャン解除とかあれば、環境変わったりデッキ構築の幅が広がったりして面白そうなのになーと思いました。

 

さいごに

 4月からの環境に大きな変化はなさそうですが、メリュシークや闇の誘惑、ドクロバットジョーカーなど、そこそこ良いカードが戻ってきているのは良いことですね。私もオルターガイストに3枚目のメリュシークを投入しなくては(*^ω^*)ノ

 今回はここまでとなります。ここまで読んでくださった皆様、ありがとうございました。 

 

【自然言語処理】TF-IDFの概要とPythonでの実装方法について

f:id:scarlet09Libra:20210224140542j:plain

どうもLibraです。

 
 今回は自言語処理(Natural Language Processing: NLP)でよく使われるTF-IDFと呼ばれる技術について解説していきます。Bag of Wordsと同じく文書を分析して特徴ベクトルに変換する特徴抽出手法の一つですが、ここではTF-IDFの概要とPythonによる実装方法についてみていきます。Bag of Wordsや特徴ベクトルについては過去の記事でまとめていますので、興味のある方は合わせてご覧になってみてください(´∀`*)

scarlet09libra.hatenablog.com



【目次】



実行環境

OS: MacOS Catalina 10.15.7

Python: 3.7.2

ライブラリ: scikit-learn 0.24.1

辞書: IPAdic

TF-IDFとは

 そもそもTF-IDFとは何ぞや?という疑問に対して一言で答えるなら「文書に含まれる単語の重要度を評価する手法のひとつ」です。

 もう少し具体的に書くと、 文書を特徴付けない単語(例えば「私」「僕」「こんにちは」「こんばんは」のような広く一般的に使われる言葉)に対して重要度を小さく補正し、文書を特徴付ける単語(例えば食レポの記事なら「ラーメン」「たこ焼き」「お寿司」など)に対して重要度を大きく補正します。このようにTF-IDFで文書分析を行い、その結果が検索エンジン、レコメンド、テキストマイニングといった技術に用いられています。
 上記の内容を下にまとめました。TF-IDFは主にこの2つの観点に基づいて特徴ベクトルとして文書の特徴を表現します。

  • ある文書の中で、他の文書と比較して頻繁に登場する単語は、その文書を特徴付けるための重要な単語である
  • 多くの文書で登場する単語は、個々の文書を特徴付ける単語として重要ではない



TF-IDFの意味

 ここではTF-IDFの意味について、もう少し深く掘り下げていきます。まずTF-IDFというのはTF(Term Frequency:単語の出現頻度)IDF(Inverse Document Frequency:DFの逆数)の積で表されます。詳しい計算方法はいったん置いといて、まずはそれぞれの意味からみていきましょう。(t: 単語 d: 文書)
 ここではゴリゴリ数式が登場するので数式に慣れてない方には「何言ってるか全然わかんねーですよ!」と思われるかもしれませんが、日本語でも意味を書いておいたので、数式が分からなくても式の意味さえ理解できれば問題なしです。

TF\verb|-|IDF(t, d) = TF(t, d) \cdot IDF(t)


TF(Term Frequency:単語の出現頻度)

 まずは定義を書いておきます。繰り返しになりますが、詳しい計算方法はいったん置いといてまず意味から確認していきましょう。

\begin{align}
TF(t, d) &= \frac{\verb| 文書dでの単語tの出現回数 |}{\verb| 文書dでのすべての単語の出現回数の和 |}\\
              &= \displaystyle{\frac{f _ {t, d}}{\sum_{t^{\prime}\in{d}} f _ {t^{\prime}, d}}}

\end{align}


 数式の解説をしていきます。まず登場人物の紹介からすると、fというのはfrequencyの略で頻度、 t^{\prime}は文書dに出現するすべての単語を表しています。分子の f _ {t, d}というのは、文書dの中で単語tの出現頻度を示しており、分母は文書dの全ての単語の出現回数の総和を示しています。要約するとこの式は「文書dの中で単語tが出現する割合」を表しています。

IDF(Inverse Document Frequency:DFの逆数)

 上と同じようにまずは定義をみていきましょう。

\begin{align}

IDF(t) &= \log{\frac{\verb| 文書の総数 |}{\verb| 単語tを含む文書の数 |}}\\
           &=\log{\frac{D}{d _ {t}}}\\
           &=\log{\frac{1}{P(X)}}

\end{align}


 まず上の式の登場人物ですが、D: 文書の総数、 d _ {t}: 単語tを含む文書の数、P(X): 確率を表しています。TFの式と比べるとシンプルな見た目をしていますが、この式の意味を理解するためには、IDFの名前にもある「Inverse: 逆数」と式の頭にくっついている「log」が重要なポイントになってきます。
 この式を見て勘の良い方なら気づいたかもしれませんが、一行目の日本語の式に注目してみてください。「あれ、これ確率っぽいな」と思った方はとてもセンスがいいです(私の専門は数学ではないのでとても尊敬します)。より正確に言うと「全文書Dからランダムに文書を選び、単語tを含む文書dを引き当てる確率」であるので、この確率をP(X)とすると三行目の式のようにP(X)の逆数の形で表すことができます。
 そしてまたここでセンスの良さが問われます。情報理論を学んだことのある方なら見覚えのある形だと思いますが、確率の逆数に対数を取ったこの式は情報量(エントロピー)そのものです。要約するとIDFというのは「単語tの重要度(出現する情報量)」を表しています。少し言葉にしづらいですが直感的には「出現頻度の高い単語は重要ではない、出現頻度の低い単語は重要であると計算している」といった理解で良いと思います。


【補足1: Dとdについて】
 Dというのは文書全体の集合です。なので単語tを含む文書dというのはDの要素になります。上の説明では「文書の総数」「単語tを含む文書の数」と説明していて(間違ってはないですが)、定数と勘違いされる方がいらっしゃるかもしれないので一応補足。

【補足2: 情報量(エントロピー)とは】
 IDFの説明でいきなり「これは情報量そのものです(ドヤァ)」と言われても情報理論を学んだことのない方にとっては「??」という感じになると思うので情報量について簡単に解説しておきます。
 例えば、友人のEさんが3回コイントスを行って、そのうち1回分の結果のみ教えてくれたとします。一方、別の友人のFさんも同じく3回コイントスを行い、そのうち2回分の結果を教えてくれたとします。この場合、Fさんが行ったコイントスの結果の方が情報量が多いということがなんとなく分かると思います。
 この情報量を定量的に計算する方法が \displaystyle{\log{\frac{1}{P(E)}}}です(P(E)は確率)。実際に計算してみると、Eさんが教えてくれた結果の情報量は、 \displaystyle{\log{\frac{1}{1/2}}} \fallingdotseq 0.69 、Fさんが教えてくれた結果の情報量は \displaystyle{\log{\frac{1}{1/2^{2}}}} \fallingdotseq 1.39となり、Fさんが教えてくれた情報量はEさんのそれよりも2倍多い(約0.69)ということが定量的にわかります(コイントスで表or裏が出る確率は1/2とします)。このように情報量は確率P(E)でおこる事象の「めずらしさ(のようなもの)」を定量化することができます。
 詳しく知りたい方は情報量(エントロピー)で調べてみましょう。

TF-IDFの計算方法

 実際にTF-IDFの計算をしてみましょう。TFとIDFをそれぞれ計算しそれらの積を求めるだけのシンプルなお仕事です。以下3つの文書の特徴量をTF-IDFを用いて計算してみましょう。

文書1「今日は雨が降っています。」
文書2「雨はコーラが飲めない」
文書3「私は雨の降る音が好きです。」


ついでにこれらの文書を単語ごとに区切ると以下のようになります。

文書1「今日 / は / 雨 / が / 降っ / て / い / ます / 。」
文書2「雨 / は / コーラ / が / 飲め / ない」
文書3「私 / は / 雨 / の / 降る / 音 / が / 好き / です / 。」



TF(Term Frequency:単語の出現頻度)

 文書2の「雨」と「コーラ」について考えていきましょう。文書2で登場する単語は全部で6個で、この中で「雨」と「コーラ」の登場回数はそれぞれ1回です。よってTFは、

\begin{align}

TF(\verb|雨, 文書|2) &= \frac{1}{6} \fallingdotseq 0.167\\
TF(\verb|コーラ, 文書|2) &= \frac{1}{6} \fallingdotseq 0.167

\end{align}



IDF(Inverse Document Frequency:DFの逆数))

 引き続き文書2の「雨」と「コーラ」について考えていきます。今回分析している文書の総数は3つです。そして「雨」を含む文書の数は3つ、「コーラ」を含む文書の数は1つです。よってIDFは、

\begin{align}

IDF(雨) &= \log{\frac{3}{3}} = 0\\
IDF(コーラ) &= \log{\frac{3}{1}} \fallingdotseq 1.099

\end{align}



TF-IDFの計算結果

 TFとIDFの結果が揃ったのであとは掛けるだけです。

\begin{align}

TF\verb|-|IDF(\verb|雨, 文書|2) &= 0.167 \times 0 = 0\\ 
TF\verb|-|IDF(\verb|コーラ, 文書|2) &= 0.167 \times 1.099 \fallingdotseq 0.184

\end{align}


 「雨」のTF-IDFは0、「コーラ」のTF-IDFは0.184という結果になりました。これは全ての文書で登場する「雨」は特徴量が低く、文書2でしか登場しない「コーラ」は特徴量が高く計算されているということを示しています。もう少し抽象度の高い表現をすると、「多くの文書で登場する単語であるほど特徴量が低くなり、登場頻度の少ない単語であるほど特徴量が高くなる」と言えます。

実装方法

import MeCab

from sklearn.feature_extraction.text import TfidfVectorizer


# 分かち書きを行う関数
def wakachi(text):

    mecab = MeCab.Tagger("-Owakati")

    return mecab.parse(text).strip().split(" ")

# サンプルテキスト
sentence = [
    "今日は雨が降っています。", 
    "雨はコーラが飲めない",
    "私は雨の降る音が好きです。"
]

# TF-IDFを計算する
vectrizer = TfidfVectorizer(tokenizer = wakachi, smooth_idf = False)
vectrizer.fit(sentence)
tfidf = vectrizer.transform(sentence)

print(tfidf.toarray())
print(vectrizer.get_feature_names())

"""
TF-IDFで計算した特徴ベクトル
[[0.27050092 0.40390655 0.19246363 0.40390655 0.         0.
  0.         0.19246363 0.40390655 0.         0.40390655 0.
  0.         0.40390655 0.         0.19246363 0.         0.        ]
 [0.         0.         0.24835604 0.         0.         0.52120304
  0.         0.24835604 0.         0.52120304 0.         0.
  0.         0.         0.         0.24835604 0.         0.52120304]
 [0.25081451 0.         0.17845659 0.         0.3745112  0.
  0.3745112  0.17845659 0.         0.         0.         0.3745112
  0.3745112  0.         0.3745112  0.17845659 0.3745112  0.        ]]
"""

"""
単語ベクトル
['。', 'い', 'が', 'て', 'です', 'ない', 'の', 'は', 'ます', 'コーラ', '今日', '好き', '私', '降っ', '降る', '雨', '音', '飲め']
"""



scikit-learnについて補足

「あれ?計算結果ちがくね?」と思われた方、その通りです。TF-IDFの計算方法は上で紹介したものだけではなく、様々なバリエーションがあります。この記事では分かりやすさを重視し、なるべくシンプルな形の式を紹介しました。TF-IDFの計算方法は色々ありますが、いずれも考え方と計算方法の大筋は同じですので、この記事の内容が理解できれば、他の方法で計算する場合でも理解しやすくなると思います。
 scikit-learnではIDFを以下のように計算しています。TFは文書dに登場する単語tの数、TF-IDFの計算方法は上と同じです。

\begin{align}

IDF(t) &= \log{\frac{\verb| 文書の総数 |}{\verb| 単語tを含む文書の数 |} + 1}

\end{align}


 そしてTF-IDFによって得られた特徴ベクトルを正規化すれば計算完了です(デフォルト設定ではユークリッドノルムを用いて正規化するようになっています)。
 実際にこの方法で文書2のTF-IDFを計算してみましょう(文書2で登場しない単語の計算は省きます。TF = 0なのでTF-IDFも0となり、これからの計算に影響しないためです)。文書2の単語の登場回数は全て1回なので、いずれの単語もTF(t, 文書2) = 1となります。IDFは、

\begin{align}

IDF(\verb|雨|) &= \log{\frac{3}{3} + 1} = 1\\
IDF(\verb|は|) &= \log{\frac{3}{3} + 1} = 1\\
IDF(\verb|コーラ|) &= \log{\frac{3}{1} + 1} \fallingdotseq 2.099\\
IDF(\verb|が|) &= \log{\frac{3}{3} + 1} = 1\\
IDF(\verb|飲め|) &= \log{\frac{3}{1} + 1} \fallingdotseq 2.099\\
IDF(\verb|ない|) &= \log{\frac{3}{1} + 1} \fallingdotseq 2.099

\end{align}


 ですので、TFとIDFの結果を掛けて、得られるTF-IDFの特徴ベクトルは以下のようになります(文書2で登場しない単語の分はここでは書いてません)。

\begin{align}

TF\verb|-|IDF _ {raw} &= (1, 1, 2.099, 1, 2.099, 2.099)

\end{align}


 さらにこの結果を正規化します。

\begin{align}

TF\verb|-|IDF _ {normalized} &= \frac{(1, 1, 2.099, 1, 2.099, 2.099)}{\sqrt{1 + 1 + 2.099^{2} + 1 + 2.099^{2} + 2.099^{2}}} \fallingdotseq (0.248, 0.248, 0.521, 0.248, 0.521, 0.521)

\end{align}


 上述したpythonコードの一番下にある単語ベクトルを見てください。今回scikit-learnから得られた単語ベクトルは、['。', 'い', 'が', 'て', 'です', 'ない', 'の', 'は', 'ます', 'コーラ', '今日', '好き', '私', '降っ', '降る', '雨', '音', '飲め']となっていますので、これに対応するように先ほど計算した文書2の特徴ベクトルを当てはめていきます。

# 手計算して得られた文書2の特徴ベクトル
 [0,         0,         0.248,     0,         0,         0.521, 
  0,         0.248,     0,         0.521,     0,         0, 
  0,         0,         0,         0.248,     0,         0.521]

# scikit-learnから得られた文書2の特徴ベクトル
 [0.         0.         0.24835604 0.         0.         0.52120304
  0.         0.24835604 0.         0.52120304 0.         0.
  0.         0.         0.         0.24835604 0.         0.52120304]


 上記のプログラムから得られた結果とほぼ一致していますね(文書1と文書3の特徴ベクトルについても同様に計算できます)。

TF-IDFとBoWとの比較

 同じ特徴量抽出の手法であるBoWとTF-IDFの結果を比較してみます。BoWでは単語を含むor含まないでしか文書の特徴を抽出できていないのに対して、TF-IDFではより詳細な文書の特徴を抽出できていることが分かるかと思います。(単語ベクトルは上述のソースコードに記載したものと同じです)

# BoWで得られた特徴ベクトル
[[1 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 0 0]
 [0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1]
 [1 0 1 0 1 0 1 1 0 0 0 1 1 0 1 1 1 0]]

# TF-IDFで得られた特徴ベクトル
[[0.27050092 0.40390655 0.19246363 0.40390655 0.         0.
  0.         0.19246363 0.40390655 0.         0.40390655 0.
  0.         0.40390655 0.         0.19246363 0.         0.        ]
 [0.         0.         0.24835604 0.         0.         0.52120304
  0.         0.24835604 0.         0.52120304 0.         0.
  0.         0.         0.         0.24835604 0.         0.52120304]
 [0.25081451 0.         0.17845659 0.         0.3745112  0.
  0.3745112  0.17845659 0.         0.         0.         0.3745112
  0.3745112  0.         0.3745112  0.17845659 0.3745112  0.        ]]



TF-IDFの欠点

 シンプルな特徴抽出手法であるBoWを改良したものがTF-IDFでした。しかしTF-IDFにも弱点があります。それはTFの計算過程で文書の長さを考慮できていないことです。この記事で紹介した方法もそうですが、TFを計算する際に分母が「文書dでのすべての単語の出現回数の和」になっていました。ということは、単語が10個含まれる文書と単語が10000個含まれる文書ではTFの値が変わってきます(例えばどちらの文書にも単語tが1つしか含まれていなかった場合、TFはそれぞれ1/10と1/10000ということになり、1000倍の差が生じてしまう)。このようにTF-IDFでは文書の長さによって計算結果に影響が出てきてしまいます
 この欠点を改良した特徴抽出手法としてBM25というものがあります。BM25はなかなか難しい内容で、TF-IDF以上に説明が長くなってしまうので、今回は名前だけの紹介とさせていただきます。
 

まとめ

 いかがでしたでしょうか。BoWと比較するとけっこう複雑な内容なので説明が長くなってしまいました(BM25に比べればまだマシですが(^_^;))。NLPの記事がなかなか好評のようなので、これからもNLPを始め様々な技術関連の記事を書いていこうと思っていますので、そのときはどうぞよろしくお願いします。


f:id:scarlet09Libra:20210224210514j:plain

【自然言語処理】N-gramの概要とpythonでの実装方法について

f:id:scarlet09Libra:20210208170742j:plain

 

どうもLibraです。

 

 今回は自然言語処理(Natural Language Processing: NLP)でよく使われるN-gramという技術について解説します。シンプルでわかりやすい手法であることから、文字列検索や辞書生成など幅広い技術に応用されており、ここでは単語N-gramと文字N-gram、それらの使用例とPythonによる実装方法についてみていきます。

 

【目次】

 

実行環境

OS: MacOS Catalina 10.15.7

Python: 3.7.2

ライブラリ: scikit-learn 0.24.1

辞書: IPAdic

 

N-gramとは

 一言で説明すると「ある文字列をN単語or文字で分割する手法」です。Nはいくつで分けても良いのですが、N = 1で分けた場合はユニグラム(uni-gram)、N = 2で分けた場合はバイグラム(bi-gram)、N = 3で分けた場合はトライグラム(tri-gram)とそれぞれ名前がついています。

 また、文字列を分割する際、単語ごとに分割する場合は単語N-gram、文字ごとに分割する場合は文字N-gramと呼びます。

 

N-gramの使用例

 今日は雨が降っています。を単語N-gramと文字N-gramで分割してみましょう。

 

単語N-gram 

ユニグラム(uni-gram)

 1単語ごとに分けるだけです。形態素解析した結果と同じになりますね。

今日 / は / 雨 / が / 降っ / て / い / ます / 。

 

バイグラム(bi-gram)

 2単語ごとに分けます。

今日は / は雨 / 雨が / が降っ / 降って / てい / います / ます。

 

トライグラム(tri-gram)

 3単語ごとに分けます。やってることは全部同じですね。

今日は雨 / は雨が / 雨が降っ / が降って / 降ってい / ています / います。

 

文字N-gram

ユニグラム(uni-gram)

 1文字ごとに分けます。

 今 / 日 / は / 雨 / が / 降 / っ / て / い / ま / す / 。

 

バイグラム(bi-gram)

 2文字ごとに分けます。

今日 / 日は / は雨 / 雨が / が降 / 降っ / って / てい / いま / ます / す。

 

トライグラム(tri-gram)

 3文字ごとに分けます。

今日は / 日は雨 / は雨が / 雨が降 / が降っ / 降って /ってい / ていま / います / ます。

 

N-gramの長所と短所について

長所
  • 辞書を必要としない

 文字N-gramの場合、辞書なしで単語の切り出しができます。

 

  • 語順情報を抽出できる

 例えば十分は「じゅっぷん」「じゅうぶん」の二通りの読み方がありますが、十分前に着くわ!君はもう十分がんばったなどの文字列をN-gramを用いて分割した場合、「十分前」「もう十分がんばった」などを語彙として抽出することで、「十分」が「じゅっぷん」「じゅうぶん」のどちらを意味しているのかを正確に把握できます。

 形態素解析やBag of Wordsでは語順情報が失われてしまいますが、N-gramを用いることで、文脈を考慮した処理が可能になります

 

短所
  • Nを増やすほど語彙が増える

 単語N-gramも文字N-gramもそうですが、基本的にNを増やすほど語彙が多くなり、メモリを圧迫したり計算負荷が高くなります。

    

  • 検索結果に誤りが生じやすい

 例えば京都という文字列を検索した場合、「東京都」がヒットしてしまう場合があります。 これは「東京都」を文字bi-gramで分割すると「東京」「京都」となってしまうためです。このようにN-gramでは意図しない検索結果(検索ノイズ)が発生することがあります。

 

実装方法

import MeCab

from sklearn.feature_extraction.text import CountVectorizer


# 分かち書きを行う関数
def wakachi(text):

mecab = MeCab.Tagger("-Owakati")

return mecab.parse(text).strip().split(" ")


# サンプルテキスト
sentence = ["今日は雨が降っています。"]


# 単語bi-gramで分割
vectrizer = CountVectorizer(tokenizer = wakachi, ngram_range = (2, 2))
vectrizer.fit(sentence)


print(vectrizer.vocabulary_)

# {'今日 は': 5, 'は 雨': 3, '雨 が': 7, 'が 降っ': 1, '降っ て': 6, 'て い': 2, 'い ます': 0, 'ます 。': 4}

 

まとめ  

 仕組みが非常にシンプルで有用性が高いですが、欠点も多いです。自然言語処理の分野ではこの考え方をベースに様々な検索サービスやテキスト解析ソフトなどが開発されています。気になった技術があればまた記事にするのでその時はどうぞよしなに。

 

f:id:scarlet09Libra:20210209201527p:plain 

【語学】ゆっくり学ぶアイスランド語PART3~人称代名詞を攻略する~

f:id:scarlet09Libra:20210204222536j:plain

 

どうもLibraです。

 

 今回はアイスランド語の人称代名詞を学んでいきます。(まだ)そこまで込み入った話ではないので気楽に構えてもらって大丈夫です。しかし、今後色々やっていく上で重要な内容になってくるので、しっかり頭に入れておきましょう!

 

 

人称代名詞とは

 日本語の人称代名詞は「自分」「あなた」「君」、英語では「I」「me」「you」など話し手や人、物などを示す代名詞です。アイスランド語の人称代名詞は英語と比べて少し多いのでがんばっていきましょう!

 

アイスランド語の人称代名詞一覧

 アイスランド語の人称代名詞を下表にまとめました。ついでに発音と対応する英語表記も一緒に記載したので確認してみましょう(=゚ω゚)ノ

 アイスランド語の人称代名詞は数(単数or複数)と格、3人称の場合はさらに性によって形が変わります。また英語と同じで親称や敬称の区別はなく、話し相手がよく知ってる人、他人、目上の人など関係なくþúやþiðを使います。(英語でも話し相手が家族、初対面の人、上司など関係なくyouを使いますね)

 格(主格、対格、与格、属格)についてですが、詳しく解説すると長くなる上に話の本筋から逸れるので細かい解説は省きます。以下に概要を書いておくのでざっくり内容を掴んでおけばOKです。

 

主格:主語として使う。ドイツ語では1格と呼ばれる。

対格:日本語での「~を」に該当する。ドイツ語では4格と呼ばれる。

与格:日本語での「~に」に該当する。ドイツ語では3格と呼ばれる。現代英語にはない格。

属格:所有を示す。日本語での「~の」に該当する。英語では所有格、ドイツ語では2格と呼ばれる。

     

  単数or複数 主格 対格 与格 属格
1人称 単数 ég mig mér mín
イェーグ ミーヒ ミイェール ミーン
I me - my
複数 við okkur okkur okkar
ヴィーズ オフクル オフクル オフカル
we us - our
2人称 単数 þú þig þér þín
スー スィーヒ スイェール スィーン
you you - your
複数 þið ykkur ykkur ykkar
スィーズ イヒクル イヒクル イヒカル
you you - your
3人称 男性 単数 hann hann honum hans
ハン ハン ホーヌム ハンス
he him - his
複数 þeir þá þeim þeirra
セイル サウ セイム セイルラ
they them - their
女性 単数 hún hana henni hennar
フーン ハーナ ヘンニ ヘンナル
she her - her
複数 þær þær þeim þeirra
サイル サイル セイム セイルラ
they them - their
中性 単数 það það því þess
サーズ サーズ スヴィー セス
it it - its
複数 þau þau þeim þeirra
ソイ ソイ セイム セイルラ
they them - their

 

人称代名詞を使った例文

Ég heiti Chise Hatori. Ég er frá Japan.

意味:私の名前は羽鳥チセです。日本から来ました。

発音:イェーグ ヘイティ チセ ハトリ イェーグ エール フラウ ヤーパン

【heiti】~という名前である 【er】~である 【frá】~から

 

 赤文字のÉgが人称代名詞です。英語ではMy name is ~ がテンプレの表現なのでmínを使いたくなりますが、アイスランド語の表現はどちらかといえばドイツ語のIch heiße ~  に近いです(てゆうか同じですね)。

 heitiとかerとか文法的に重要な内容が含まれていますが、今回の解説は人称代名詞に絞ることにします。語学学習はゆっくりが大切なのです(*´∀`*)

 

Hún heitir Elaina. Hún er frá Robetta.

意味:彼女の名前はイレイナです。彼女はロベッタから来ました。

発音:フーン ヘイティル イレイナ フーン エール フラウ ロベッタ

 

まとめ

 いかがでしたでしょうか。さっそく英語にない表現があるので戸惑う方もいたかもしれませんが、上の表さえ押さえてしまえば人称代名詞に関しては問題ないと思います。ドイツ語を軽く知っている人であれば、構造が英語より似てるのでわかりやすかったかもしれませんね。

 今回はここまでとなりますが、気負わずゆっくり学んでいきましょう( ´∀`)

 

f:id:scarlet09Libra:20210204222811j:plain

 

【遊戯王】アルティマヤツィオルキンを乱用せよ!聖刻ツィオルキンデッキ紹介

 

どうもLibraです。

 

あけましておめでとうございます。今年もよろしくお願いします(*´꒳`*)

 

 今回は私の好きなモンスターである「アルティマヤツィオルキン」を軸にした聖刻デッキを紹介します。ツィオルキンが発売した当時、すぐこのデッキを組んだものですが(懐かしいなぁ)リンクショックによって一度このデッキは死にました泣。

 現在ではマスタールールが変更され、またこのデッキが組めるようになったので、今のカードプールを駆使して当時のデッキをリメイクしてみました。まずはツィオルキンの効果をおさらいしていきましょう(`・∀・´)

 

f:id:scarlet09Libra:20210102035505j:plain

アルティマヤ・ツィオルキン 星0/闇/ドラゴン/ATK0/DEF0


ルール上、このカードのレベルは12として扱う。
このカードはS召喚できず、自分フィールドの表側表示のレベル5以上で同じレベルの、チューナーとチューナー以外のモンスターを1体ずつ墓地へ送った場合のみ特殊召喚できる。
(1):1ターンに1度、自分フィールドに魔法・罠カードがセットされた時に発動できる。「パワー・ツール」Sモンスターまたはレベル7・8のドラゴン族Sモンスター1体をEXデッキから特殊召喚する。
(2):フィールドのこのカードは、他の自分のSモンスターが存在する限り、
攻撃対象及び、効果の対象にならない。


【目次】

 

このデッキの戦い方

 積極的に先攻をとりましょう。先攻でツィオルキンを出せれば一番強いですが、聖刻なのでそう上手くいきません笑。

 しかし普通の聖刻と違い罠カードが大量に入っているので、たとえツィオルキンを出せなくても罠ガン伏せしておけばなんとかなります。後攻の方が安定してツィオルキンを出せますが、相手に先攻を渡してしまう方がリスクが高いので、先攻をとってツィオルキンを出せれば良し、出せなければ罠ガン伏せしてツィオルキンを出せるまで粘りましょう。

  

デッキレシピ

f:id:scarlet09Libra:20210102051245p:plain

 

【聖刻ツィオルキン】

聖刻龍トフェニドラゴン×3

聖刻龍シユウドラゴン×3

聖刻龍アセトドラゴン×3

灰流うらら×3

増殖するG×2

ラブラドライドラゴン

エレキテルドラゴン

召集の聖刻印×3

金満で謙虚な壺×3

抹殺の指名者×3

墓穴の指名者 ×2

ハーピィの羽根箒

追走の翼×3

無限泡影×3

神の宣告×3

神の通告×3

 

フォトンストリークバウンサー

セイクリッドトレミスM7

アルティマヤツィオルキン×3

クリスタルウィングシンクロドラゴン×3

スターダストドラゴン×2

閃珖竜スターダスト

煉獄龍オーガドラグーン

ライトロードアークミカエル

クリアウィングシンクロドラゴン

月華竜ブラックローズ 

 

各カードの採用理由

聖刻龍

 このデッキではトフェニ、シユウ、アセトのみ採用です。ネフテはツィオルキンに即座につなげられないため見送り。

 

手札誘発について

 増殖するGよりも無限泡影を優先して3枚にしています。Gは伏せられないですし、止められることも多いですので優先度を下げました。

 

金満で謙虚な壺

f:id:scarlet09Libra:20210102154106j:plain

通常魔法

このカード名のカードは1ターンに1枚しか発動できず、このカードを発動するターン、自分はカードの効果でドローできない。
(1):自分のEXデッキのカード3枚または6枚を裏側表示で除外して発動できる。除外した数だけ自分のデッキの上からカードをめくり、その中から1枚を選んで手札に加え、残りのカードを好きな順番でデッキの一番下に戻す。このカードの発動後、ターン終了時まで相手が受ける全てのダメージは半分になる。

 

 最強カードですね。先攻ではツィオルキンを出すための聖刻パーツを持ってきたり、ツィオルキンを出した後も自身を守るための罠カードをサーチしたりと腐る場面がありません。3積み必須。除外する候補としては、ツィオルキン、クリスタルウィング、スターダストドラゴン、オーガドラグーン、月華竜、バウンサー or トレミスですね。

 

追走の翼

f:id:scarlet09Libra:20210102155640p:plain

永続罠

自分フィールドのSモンスター1体を対象としてこのカードを発動できる。
(1):このカードが魔法&罠ゾーンに存在する限り、対象のモンスターは戦闘及び相手の効果では破壊されない。
(2):対象のモンスターがレベル5以上の相手モンスターと戦闘を行うダメージステップ開始時に発動できる。その相手モンスターを破壊する。対象のモンスターの攻撃力はターン終了時まで、この効果で破壊したモンスターの元々の攻撃力分アップする。
(3):対象のモンスターがフィールドから離れた場合にこのカードは破壊される。

 

 主にツィオルキンを守るために使います。ツィオルキン自身の効果も加味すれば、マジェスペクターと同様の耐性を付与できますのでかなり場持ちが良くなります。勿論、クリスタルウィングなどの強力なモンスターにもこのカードで耐性を付与できますので、何かと便利なカードです。

 

 

デッキ評価

 このデッキを攻撃力、妨害力、展開力、持続力、安定性の観点からそれぞれ5段階評価してみました。あくまでざっくりなので参考までに。

f:id:scarlet09Libra:20210102164032p:plain

攻撃力:相手の妨害に対してどれくらい強いか、デッキの攻めやすさ

妨害力:相手にどれだけ妨害できるか

展開力:展開のしやすさ

持続力:長期戦でどの程度戦えるか

安定性:事故率の低さ

 

さいごに

 いかがでしたでしょうか。ツィオルキンは個人的に好きなカードなので、マスタールール変更によってまた使えるようになったのは本当に嬉しいですね(リンクショック許すまじ)。聖刻でも出しやすく、無尽蔵にシンクロモンスターを出し続けられるのはなんとも言えぬ優越感と爽快感があります。興味のある方はぜひ組んでみてください(´∀`*)