diff --git a/akaza-data/Makefile b/akaza-data/Makefile deleted file mode 100644 index 0468f36..0000000 --- a/akaza-data/Makefile +++ /dev/null @@ -1,141 +0,0 @@ -PREFIX ?= /usr -DATADIR ?= $(PREFIX)/share -DESTDIR ?= - - -all: data/bigram.model \ - data/bigram.model \ - data/SKK-JISYO.akaza - -# ------------------------------------------------------------------------- - -# wikipedia の前処理 - -work/jawiki/jawiki-latest-pages-articles.xml.bz2: - mkdir -p work/jawiki/ - wget --no-verbose --no-clobber -O work/jawiki/jawiki-latest-pages-articles.xml.bz2 https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 - -work/jawiki/jawiki-latest-pages-articles.xml: work/jawiki/jawiki-latest-pages-articles.xml.bz2 - bunzip2 --keep work/jawiki/jawiki-latest-pages-articles.xml.bz2 - -work/jawiki/extracted/_SUCCESS: work/jawiki/jawiki-latest-pages-articles.xml - python3 -m wikiextractor.WikiExtractor --quiet --processes 8 --out work/jawiki/extracted/ work/jawiki/jawiki-latest-pages-articles.xml - touch work/jawiki/extracted/_SUCCESS - -# ------------------------------------------------------------------------- -# Unidic の処理 -# ------------------------------------------------------------------------- - -work/unidic/unidic.zip: - mkdir -p work/unidic/ - wget --no-verbose --no-clobber -O work/unidic/unidic.zip https://clrd.ninjal.ac.jp/unidic_archive/csj/3.1.1/unidic-csj-3.1.1.zip - -work/unidic/lex_3_1.csv: work/unidic/unidic.zip - unzip -D -o -j work/unidic/unidic.zip -d work/unidic/ - touch work/unidic/lex_3_1.csv - -# ------------------------------------------------------------------------- - -# Vibrato トーカナイズ - -work/vibrato/ipadic-mecab-2_7_0.tar.gz: - mkdir -p work/vibrato/ - wget --no-verbose --no-clobber -O work/vibrato/ipadic-mecab-2_7_0.tar.gz https://github.com/daac-tools/vibrato/releases/download/v0.3.1/ipadic-mecab-2_7_0.tar.gz - -work/vibrato/ipadic-mecab-2_7_0/system.dic: work/vibrato/ipadic-mecab-2_7_0.tar.gz - mkdir -p work/vibrato/ - tar -xmzf work/vibrato/ipadic-mecab-2_7_0.tar.gz -C work/vibrato/ - -work/jawiki/vibrato-ipadic/_SUCCESS: src/subcmd/tokenize.rs mecab-user-dict.csv src/corpus_reader/wikipedia_extracted.rs work/jawiki/extracted/_SUCCESS work/vibrato/ipadic-mecab-2_7_0/system.dic - cargo run --release -- tokenize \ - --reader=jawiki \ - --user-dict=mecab-user-dict.csv \ - --system-dict=work/vibrato/ipadic-mecab-2_7_0/system.dic \ - work/jawiki/extracted \ - work/jawiki/vibrato-ipadic/ \ - -vvv - -work/aozora_bunko/vibrato-ipadic/_SUCCESS: src/corpus_reader/aozora_bunko.rs work/vibrato/ipadic-mecab-2_7_0/system.dic - cargo run --release -- tokenize \ - --reader=aozora_bunko \ - --user-dict=mecab-user-dict.csv \ - --system-dict=work/vibrato/ipadic-mecab-2_7_0/system.dic \ - aozorabunko_text/cards/ \ - work/aozora_bunko/vibrato-ipadic/ \ - -vv - -work/vibrato-ipadic.wfreq: work/jawiki/vibrato-ipadic/_SUCCESS src/subcmd/wfreq.rs work/aozora_bunko/vibrato-ipadic/_SUCCESS - cargo run --release -- wfreq \ - --src-dir=work/jawiki/vibrato-ipadic/ \ - --src-dir=work/aozora_bunko/vibrato-ipadic/ \ - --src-dir=corpus/ \ - work/vibrato-ipadic.wfreq -vvv - -# threshold が 16 なのはヒューリスティックなパラメータ設定による。 -# vocab ファイルを作る意味は、辞書の作成のためだけなので、わざわざ作らなくてもよいかもしれない。 -work/vibrato-ipadic.vocab: work/vibrato-ipadic.wfreq src/subcmd/vocab.rs - cargo run --release -- vocab --threshold 16 work/vibrato-ipadic.wfreq work/vibrato-ipadic.vocab -vvv - - -# ------------------------------------------------------------------------- - -# 統計的仮名かな漢字変換のためのモデル作成処理 - -work/stats-vibrato-unigram.wordcnt.trie: work/vibrato-ipadic.wfreq - cargo run --release -- wordcnt-unigram \ - work/vibrato-ipadic.wfreq \ - work/stats-vibrato-unigram.wordcnt.trie - -work/stats-vibrato-bigram.wordcnt.trie: work/stats-vibrato-unigram.wordcnt.trie work/stats-vibrato-unigram.wordcnt.trie src/subcmd/make_stats_system_bigram_lm.rs work/aozora_bunko/vibrato-ipadic/_SUCCESS - cargo run --release -- wordcnt-bigram --threshold=3 \ - --corpus-dirs work/jawiki/vibrato-ipadic/ \ - --corpus-dirs work/aozora_bunko/vibrato-ipadic/ \ - work/stats-vibrato-unigram.wordcnt.trie work/stats-vibrato-bigram.wordcnt.trie - -data/bigram.model: work/stats-vibrato-bigram.wordcnt.trie work/stats-vibrato-unigram.wordcnt.trie src/subcmd/learn_corpus.rs corpus/must.txt corpus/should.txt corpus/may.txt data/SKK-JISYO.akaza - cargo run --release -- learn-corpus \ - --delta=2000 \ - --may-epochs=10 \ - --should-epochs=100 \ - --must-epochs=10000 \ - corpus/may.txt \ - corpus/should.txt \ - corpus/must.txt \ - work/stats-vibrato-unigram.wordcnt.trie work/stats-vibrato-bigram.wordcnt.trie \ - data/unigram.model data/bigram.model \ - -v - -data/unigram.model: data/bigram.model - -# ------------------------------------------------------------------------- - -# システム辞書の構築。dict/SKK-JISYO.akaza、コーパスに書かれている語彙および work/vibrato-ipadic.vocab にある語彙。 -# から、SKK-JISYO.L に含まれる語彙を除いたものが登録されている。 - -data/SKK-JISYO.akaza: work/vibrato-ipadic.vocab dict/SKK-JISYO.akaza src/subcmd/make_dict.rs corpus/must.txt corpus/should.txt corpus/may.txt work/unidic/lex_3_1.csv - cargo run --release -- make-dict \ - --corpus corpus/must.txt \ - --corpus corpus/should.txt \ - --corpus corpus/may.txt \ - --unidic work/unidic/lex_3_1.csv \ - --vocab work/vibrato-ipadic.vocab \ - data/SKK-JISYO.akaza \ - -vvv - -# ------------------------------------------------------------------------- - -evaluate: data/bigram.model - AKAZA_KEYMAP_DIR=../keymap/ AKAZA_ROMKAN_DIR=../romkan/ AKAZA_MODEL_DIR=data/ cargo run --release evaluate anthy-corpus -v - -# ------------------------------------------------------------------------- - -install: - install -m 0755 -d $(DESTDIR)$(DATADIR)/akaza-data - install -m 0644 data/*.trie $(DESTDIR)$(DATADIR)/akaza-data - -# ------------------------------------------------------------------------- - -test-data: work/vibrato/ipadic-mecab-2_7_0/system.dic - -.PHONY: all install evaluate test-data - diff --git a/akaza-data/README.md b/akaza-data/README.md index dbebb6d..790bc0a 100644 --- a/akaza-data/README.md +++ b/akaza-data/README.md @@ -4,77 +4,4 @@ 辞書および言語モデルの管理用のツールです。 -## How to build this? - - make - make install - -## Dependencies - -### Runtime Dependencies - -* wikiextractor -* python3 -* wget - -### Buildtime dependencies - -* rust - -## How it works? - -TODO: 書き直し - -1. 日本語版 wikipedia の jawiki-latest-pages-articles.xml.bz2 を取得 -2. bunzip2 で伸長 -3. wikiextractor で text/ 以下に展開する -4. bin/wiki2text-runner.py で、kytea による読み推定を実施し、分かち書きして dat/ に保存。 -5. cat で jawiki.txt に連結して保存する。 -6. text2wfreq.py で頻度ファイルを生成する。 jawiki.wfreq -7. wfreq2vocab.py で語彙ファイルを生成する。jawiki.vocab - -* ここの足切りラインを大きくすると変換精度は高まるが、生成データがでかくなる。 -* 現在は、「ペパボ」が入るという理由で 16 回以上登場したものとしている。 - -## 生成されるデータ - -### bigram.model, unigram.model - -marisa-trie 形式のデータです。1gram, 2gram のデータが素直に格納されています。 - -フォーマットは、2gram の場合は以下のようになっています。 - -愛/あい\tは/は => -0.525252 - -浮動小数点数がスコアです。このスコアは、n-gram の確率の log10 をとって - をつけたものです。 - -## Size に関するメモ - -以下でざっくりとした見積もりが書いてあるが、現実的にはトライ構造で圧縮されるため、その通りにはならないです。 - -* word1 + word2 + score -* 4byte + 4byte + 2byte - -entries(bigram cutoff=3): - - 1gram: 297,228 - -bigram entries: - -- 3: 5,744,624 -- 10: 2,639,415 -- 20: 1,603,540 -- 50: 803,462 - -5M * 10 = 50MB - -## 調整方法 - -誤変換が多いな、と思ったら。 - -* vibrato がトーカナイズできてなくてスコアがついてないな、と思った場合は mecab-user-dict.csv にエントリーを追加してください。 - * akaza-data/ で make all したあとに、該当単語が work/jawiki/vibrato-ipadic.vocab に入っていなければ、mecab-user-dict.csv - に追加する必要があります - * このファイルには、明らかに必要な元号/国名などのみを追加してください。 - * 固有名詞などは、入れたとて Wikipedia 内での記述回数が少ないために、スコアがつかないので無意味です。 - +詳細は、 `akaza-data help` を実行してみると良いと思います。