deeplearning4j のJapaneseTokenizerFactoryの使い方について
現在下記Java(spring boot)コードにて、deeplearning4jのword2vec実現を試みております。
// Wikipediaの日本語コーパスファイル
SentenceIterator iter = new BasicLineIterator(resourceLoader.getResource("classpath:static/corpus/corpus.txt").getFile());
TokenizerFactory t = new JapaneseTokenizerFactory();
Word2Vec vec = new Word2Vec.Builder()
.minWordFrequency(2)
.layerSize(100)
.seed(42)
.windowSize(5)
.iterate(iter)
.tokenizerFactory(t)
.workers(10)
.build();
// 実行
vec.fit();
System.out.println(vec.wordsNearest("ラテン",1)); → []※空の配列が出力される
<pom.xml>
<!-- kuromoji
<dependency>
<groupId>com.atilika.kuromoji</groupId>
<artifactId>kuromoji-ipadic</artifactId>
<version>0.9.0</version>
</dependency>
-->
<!-- nd4j -->
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>0.9.1</version>
</dependency>
<!-- woed2vec -->
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-nlp-japanese</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-core</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-ui_2.10</artifactId>
<version>0.9.1</version>
</dependency>
wordsNearest()
の引数に英単語を渡した場合は動作しているようですが、日本語を渡した場合は、wordsNearest()
の実行結果が何もありません。
どのようにソースを修正すれば日本語が動作するか、分かる方がいましたらご教授をお願い致します。また、JapaneseTokenizerFactoryでないその他TokenizerFactoryでの実現方法があれば、そちらでも構いません。
<corpus.txtの内容>
[[アンパサンド]]
アンパサンド (&、英語名:ampersand) とは並立助詞「…と…」を意味する記号である。ラテン語の "et" の合字で、Trebuchet MSフォントでは、と表示され "et" の合字であることが容易にわかる。ampersa、すなわち "and per se and"、その意味は"and [the symbol which] by itself [is] and"である。
== 歴史 ==
その使用は1世紀に遡ることができ、5世紀中葉から現代に至るまでの変遷がわかる。 Z に続くラテン文字アルファベットの27字目とされた時期もある。
アンパサンドと同じ役割を果たす文字に「{仮リンク|ティロ式記号|en|Tironian notes}のet」と呼ばれる、数字の「7」に似た記号があった(⁊, U+204A)。この記号は現在もゲール文字で使われている。
記号名の「アンパサンド」は、ラテン語まじりの英語「& はそれ自身 "and" を表す」(& per se and) のくずれた形である。英語以外の言語での名称は多様である。
---追記---
corpus.txtのファイル形式をSJISにすることで、wordsNearest()の結果配列を取得することができましたが、corpus.txtがUTF8ですとwordsNearest()の結果配列が空になってしまう状況です。