51859


現在下記Java(spring boot)コードにて、deeplearning4jのword2vec実現を試みております。

[code]

    // 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)); → []※空の配列が出力される 
    
[/code]

＜pom.xml＞

[code]

    <!-- 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>
    
[/code]

`wordsNearest()`の引数に英単語を渡した場合は動作しているようですが、日本語を渡した場合は、`wordsNearest()`の実行結果が何もありません。  
どのようにソースを修正すれば日本語が動作するか、分かる方がいましたらご教授をお願い致します。また、JapaneseTokenizerFactoryでないその他TokenizerFactoryでの実現方法があれば、そちらでも構いません。

＜corpus.txtの内容＞

[code]

    [[アンパサンド]]
    アンパサンド (&、英語名：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) のくずれた形である。英語以外の言語での名称は多様である。
    
[/code]

\---追記---  
corpus.txtのファイル形式をSJISにすることで、wordsNearest()の結果配列を取得することができましたが、corpus.txtがUTF8ですとwordsNearest()の結果配列が空になってしまう状況です。


CC BY-SA 4.0
2019-01-09T07:51:37.823
51835
2019-01-11T06:18:28.363
2019-01-11T06:18:28.363
7626
7626
question
java word2vec
deeplearning4j のJapaneseTokenizerFactoryの使い方について


以下のいずれかではないかと思います。

  * `corpus.txt`に「ゲーム」と言う単語が無い
  * 「ゲーム」と言う単語が無い別の`corpus.txt`を参照している

私の環境で、同じ`pom.xml`とソースコードで確認してみましたが、`corpus.txt`に「ゲーム」と言う単語が含まれていれば、配列は空にはなりませんでした。

英単語であれば動作するとのことなので、別のディレクトリにある英語版の`corpus.txt`を参照しているのではないでしょうか。


CC BY-SA 4.0
2019-01-10T06:42:37.403
51859
2019-01-10T06:48:25.100
2019-01-10T06:48:25.100
21092
21092
51835
answer