(ValaとかC#とか知らんけど、本当はnullableでが存在しないケースも認めてエラーチェック等で対応するのが筋という気がするけど…そうも言ってらんない以上は、sortlm.py側を加工して辞書側で対処するしかないのかもしれない)
はあるけどが見つからないのでエラー、んでもってbigram-decorderではbos_node, eos_nodeを見てるってことは…1-gram(単語辞書)内では必須って話になるのかなあ。
ちょい強引ではあるけど、無かった場合は強制的に追加とかそういう処置も考えないといけない?
で、sorted-bigram-language-model.valaのclass SortedBigramLanguageModelは多分LanguageModel, UnigramLanguageModel, BigramLanguageModelを継承していて、public override LanguageModelEntry? @get ()の処理が_eos = get(うあうだ)の実体なんだろうな。ここで何が起きてるのか、を知る必要はありそう。
中の人の勘が鋭ければ、あのPRの裏で何をしようとしているかは気づくはず。わざわざIRSTLMとツール名を書いているので。
とりあえず、sortlm.pyの修正はおしまい。IRSTLMで変換したarpaの処理もできているので、あとはこれを実際にlibkkcに食わせて何が起こるかを見る…ってことになるな。 https://github.com/ueno/libkkc/pull/46
(marisa-)trieを使っている以上、辞書の作りとしては確かにそうなるわな…
2-gram: 1-gramに定義された単語でペアを作ること
3-gram: 2-gramに定義された単語ペア+1-gramに定義された単語であること
とはいえその辺の言語資源で適当に作ったN-gramだと場合によっては
そう理解してる。
とりあえず、sortlm.pyの修正はおしまい。IRSTLMで変換したarpaの処理もできているので、あとはこれを実際にlibkkcに食わせて何が起こるかを見る…ってことになるな。 https://github.com/ueno/libkkc/pull/46
なんなのPythonの内包表記って…すっきり書けるのは理解するけど、エラーチェック入れないといけない場合にはどうしようもないじゃんこれ…
そういえば14MHz/430MHzしか使わない、移動しない局に関する変更申請はやっと終わりました。あとは局免をもらうための返信用封筒を送らねば…
あ、読み仮名付け(兼データのクリーニング他)のコード、
マスコミの何社かが滅んでくれると良いかなーと思ってはいるのですが、なかなかそうはなりませんね…
IRSTLMで、日本語ウェブコーパス2010の3-gramデータ(出現頻度1000以上)からdata.arpaを生成できたけど…例によって、sortlm.pyがエラー吐きますね…
適当にでっち上げたdata.arpaではない(ちゃんとした言語モデルになってるはずだ)から、sortlm.pyに何か問題がある可能性を考えないといけないのかもー
IRSTLMのページ、github上のを追うしかなさそう。hlt-mt.fbk.euのはweb archive上でしか見られないけどそんなに有用な情報は見当たらない…
https://web.archive.org/web/20210126180309/https://hlt-mt.fbk.eu/technologies/irstlm
A tutorial on the IRSTLM library (2008/May/17) https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=2ef9472ecfc0c3d48a0f9b2a031916c703fb1140 分からん…
How to distributed LM training: step 3に
「ngt -InputFile=TRAIN -FilterDict=DICT.000 -NgramSize=3
-OutputFile=WWW.000 -OutputGoogleFormat=yes」なんてあるので、どこかでGoogle形式を使っていそうな感じではある。
というか、step4を見るに、Google形式の3-gramのファイルのみを使って1-gram/2-gram/3-gramを生成し、最後にarpa化してる。
…試してみる価値はありそうだな?
A tutorial on the IRSTLM library (2008/May/17) https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=2ef9472ecfc0c3d48a0f9b2a031916c703fb1140 分からん…
2009年の時点で、SRILMでGoogle N-gramをARPA化できませんか?って話が出てる。
https://mailman.speech.sri.com/pipermail/srilm-user/2009q2/000750.html
それに対し、SRILMはあくまでも仮の対応でしかしない(意訳)ので、MSRLMかIRSTLMを使えという返事が来ている。
https://mailman.speech.sri.com/pipermail/srilm-user/2009q2/000751.html
少し…?あんまり変わらない…?うーん…?
とりあえず、SRILM-FAQのB6) e)ただし-text tune.ext -vocab tune.vocab抜きでngram-countが通ることは確認した。
…で、ここからどうやってdata.arpa作るのかにゃ?
https://github.com/BitSpeech/SRILM/blob/master/utils/src/make-google-ngrams.gawk ←お前はこの存在を知っていながらちゃんと読んでないだろう?とお叱りを受けそう。
1gms/vocabは1-gramそのもの、
2gms/2gm-0000は2-gramのデータで、2gm.idx以降は各ファイルの先頭にあるN-gram…たとえば2gm-0000の最初のエントリが「 ぁ 60447」なら、2gm.idxの中身は「2gm-0000 ぁ」みたいな感じ。
こんなの知るかああああああ💢、というのはただの逆切れですね。お見苦しいものをお見せして申し訳ない。
kakasiに食わせて読み仮名を付けるのが適切なのかどうか、という問題もあるのか。
mecabとかjumanとか、他の形態素解析エンジンの利用もあり得る…と。