[[ノート/テキストマイニング]]

*gensimのdoc2vecで文のベクトル表現を作り、その空間を試してみたい (2016-02-22) [#h725025a]

**まずはMeCabの改善(2016-03-03) [#seee4311]
最近はいろいろな追加辞書ができているようだ。
-  [[Ubuntu14.04でmecabの辞書にWikipediaとはてな単語を追加:http://toukei.runble1.com/ubuntu-mecab-dictionary-add/]]
- [[形態素解析のために Wikipedia とはてなキーワードからユーザー辞書を生成し利用する - Qiita:http://qiita.com/ynakayama/items/388c82cbe14c65827769]]
- [[MeCabのユーザー辞書にWikipediaとはてなの単語を追加する - kzy52's blog:http://kzy52.com/entry/2014/10/05/195534]]

それと、ちょっとした知識
- [[MeCabをPythonから使う注意点とか - Shogo's Blog:http://shogo82148.github.io/blog/2012/12/15/mecab-python/]]

実際使う時に
- [[スタバのTwitterデータをpythonで大量に取得し、データ分析を試みる その3 - Qiita:http://qiita.com/kenmatsu4/items/02034e5688cc186f224b]]
にあるように、
     for i in range(140):  # ツイートなのでMAX140文字
         if node.surface != "":  # ヘッダとフッタを除外
             word_type = node.feature.split(",")[0]
             if word_type in ["名詞", "形容詞", "動詞"]:
                 plain_word = node.feature.split(",")[6]
                 if plain_word !="*":
                     result_dict[word_type.decode('utf-8')].append(plain_word.decode('utf-8'))
         node = node.next
とか
- [[テキストからキーワードを抽出する方法(非推奨) | 配電盤:http://blog.unfindable.net/archives/4347]]
 for line in sys.stdin:
     node = mecab.parseToNode(line)
     node = node.next
     while node:
         if node.feature.startswith("名詞,"):
             if not node.surface.isdigit():
                 counter[node.surface] = counter.get(node.surface, 0) + 1
         node = node.next
とか。

途中でrubyを使いたいので、rubyをインストール。 ⇒  [[CentOS に Ruby をインストールする - kzy52's blog:http://kzy52.com/entry/2015/05/13/201831]]

このとおりにやって、できた。

 $ mecab
 人工無能
 人工    名詞,一般,*,*,*,*,人工,ジンコウ,ジンコー
 無能    名詞,一般,*,*,*,*,無能,ムノウ,ムノー
 EOS
 
 $ mecab -u onomasticon.dic
 人工無能
 人工無能        名詞,一般,*,*,*,*,人工無能,*,*
 EOS

使うには、
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # MeCabの使い方テスト
 import sys, os
 import string, codecs
 import MeCab
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 s = u"すもももももももものうち。クラウドは広く使われている技術である。"
 '''
 tagger = MeCab.Tagger('-Ochasen -u /usr/local/lib/mecab/dic/wikihatena.dic')
 t = tagger.parse(s.encode('utf-8'))
 print t.decode('utf-8')
 '''
 #tagger = MeCab.Tagger('-Ochasen')
 tagger = MeCab.Tagger('-Ochasen -u /usr/local/lib/mecab/dic/wikihatena.dic')
 tagger.parse('')  # こっそりと必要らしい
 node = tagger.parseToNode(s.encode('utf-8'))
 while node:
   print (node.surface.decode('utf-8')), '\t', 
   print (node.feature.decode('utf-8'))
   node = node.next
出力は
         BOS/EOS,*,*,*,*,*,*,*,*
 すもももももも  名詞,一般,*,*,*,*,すもももももも,*,*
 もも    名詞,一般,*,*,*,*,もも,モモ,モモ
 の      助詞,連体化,*,*,*,*,の,ノ,ノ
 うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
 。      記号,句点,*,*,*,*,。,。,。
 クラウド        名詞,一般,*,*,*,*,クラウド,*,*
 は      助詞,係助詞,*,*,*,*,は,ハ,ワ
 広く    形容詞,自立,*,*,形容詞・アウオ段,連用テ接続,広い,ヒロク,ヒロク
 使わ    動詞,自立,*,*,五段・ワ行促音便,未然形,使う,ツカワ,ツカワ
 れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
 て      助詞,接続助詞,*,*,*,*,て,テ,テ
 いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
 技術    名詞,一般,*,*,*,*,技術,ギジュツ,ギジュツ
 で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
 ある    助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
 。      記号,句点,*,*,*,*,。,。,。
         BOS/EOS,*,*,*,*,*,*,*,*

**gensimのdoc2vecのために、Wikipediaソースを文ごとに分解する [#mb3ea9b2]
「。」で切るだけでは足りない。
 0 [[ アンパサンド ]]
 
 CATEGORIES : 約 物 , ラテン語 の 語句
 
 アンパサンド ([ tpl ] lang | en | ampersand [/ tpl ], &) と は 「 … と … 」 を 意味 する 記号 で ある
 1 英語 の [ tpl ] lang | en |" and "[/ tpl ] に 相当 する ラテン語 の [ tpl ] lang | la |" et "[/ tpl ] の 合 字 で 、 [ tpl ] lang | en |" etc ."[/ tpl ] ( et cetera = and so forth ) を [ tpl ] lang | en |"& c ."[/ tpl ] と 記述 する こと が ある の は その ため
 2 Trebuchet MS フォント で は 、 10 px と 表示 さ れ " et " の 合 字 で ある こ と が 容易 に わかる
 3 == 歴史 ==
 
 その 使用 は 1 世紀 に 遡る こと が でき ( 1 )、 5 世紀 中葉 ( 2 , 3 ) から 現代 ( 4 - 6 ) に 至る まで の 変遷 が わかる
 4 Z に 続く ラテン 文字 アルファベット の 27 字 目 と さ れ た 時期 も ある
 5 記号 名 の 「 アンパサンド 」 は 、 ラテン語 の 「 & は それ 自身 " and " を  表す 」 [ tpl ] lang | la |(& per se and )[/ tpl ] から き て いる
 6 == 手書き ==
 
 日常 的 な 手書き の 場合 、 欧米 で アンパサンド は 「 ε 」 に 縦 線 を 引く  単純 化 さ れ た もの が 使わ れる こと が ある
 7 また 同様 に 、 「 t 」 または 「+( プラス ) 」 に 輪 を 重ね た よう な 、 無声 歯茎 側面 摩擦音 を 示す 発音 記号 「[ tpl ] IPA | ? [/ tpl ]」 の よう な もの が 使わ れる こと も ある
 8 == プログラミング 言語 ==
 
 プログラミング 言語 で は 、 C など 多数 の 言語 で AND 演算 子 として 用い られる
 9 以下 は C の 例
 10 * X = A && B の よう に 2 個 重ね た もの は 論理 AND を 表す
 11 この 場合 A , B が ともに 真 なら ば X も 真 、 それ 以外 は 偽 で ある
 12 * 0 x 12345678 & 0 x 0 f 0 f 0 f 0 f の よう に 1 個 で あれ ば ビット AND を 表す
 13 この 場合 の 結果 は 0 x 02040608 で ある
 14 BASIC 系列 の 言語 で は 文字 列 の 連結 演算 子 として 使用 さ れる
 15 " foo " & " bar " は " foobar " を 返す
 16 また 、 主 に マイクロソフト 系 で は 整数 の 十 六 進 表記 に & h を 用い 、 & h 0 F ( 十 進 で 15 ) の よう に 表現 する
 17 SGML 、 XML 、 HTML で は 、 アンパサンド を 使っ て SGML 実体 を 参照 する
 18 == その他 ==
 
 * & ( シングル )( アンド ) は 、 浜崎 あゆみ が 2003 年 に 発売 し た 4 曲 入 り マキシ シングル
 19 * & ( 一 青 窈 の アルバム )( アンド ) は 、 一青 窈 が 2005 年 に 発売 し た アルバム 、 及び 同 アルバム に 収録 さ れ た 楽曲
 20 *& ( 漫画 )( アンド ) は 、 お かざ き 真 里 による 漫画 作品
 21 * アンパサンド は 、 日本 の 競走 馬
 22 ⇒ アンパサンド ( 競走 馬 )
 
 == 符号 位置 ==
 
 
 [[ 言語 ]]
 
 CATEGORIES : 言語 , 言語 学 , 民族
 
 言語 ( げん ご [ tpl ] lang - en - short | Language [/ tpl ]) と は 、 コミュ ニケーション の ため の 記号 の 体系 で ある
 23 狭義 に は 人間 の 音声 による 音声 言語 を 指す が 、 広義 に は 身振り など 音声 以外 の 要素 も 含む
 24 また 、 動物 間 の コミュニケーション や 、 コンピュータ に 指示 する ため の 記号 体系 を 指す 場合 も ある
 25 英語 や 日本語 や 中国 語 の よう に 自然 発生 的 に 生まれ た 言語 を 自然  言語 と 呼び 、 これ に対して 人為 的 に 創作 さ れ た 言語 を 人工 言語 と 呼ぶ
 26 後者 に は 、 もっぱら 人間 同士 による やりとり を 目的 と し た エスペラン ト 、 コンピュータ の 操作 を 目的 と し た プログラミング 言語 、 それから 人間 に も コンピュータ に も 適し た ロ ジバン といった もの が ある
 27 自然 言語 は 、 母語 と する 人々 の 存在 を 失う と 使用 さ れ なく なり 死 語 ( 廃語 ) と 呼ば れる
 28 == 定義 ==
 
 狭義 に は 、 人間 の コミュニケーション 、 相互 作用 を 統べる 規則 の 内 、 声 にまつわる 部分 、 あるいは その 声 の 代替 として の 文字 表記 など にまつわる 部分 を 指す
 29 手話 、 トーキング ドラム など の 例 において も 、 おおよそ 声 による コミュニケーション と 対応 し て いる
 30 ただし 、 かつて 日本 の 手話 言語 学者 は 手話 は 音声 語 と は 形態 におい て 異なる が ゆえに 、 音声 言語 学 と は まったく 異なる 言語 学 用語 、 文法  用語 によって 研究 さ れる べき で ある という 立場 を とっ て い た
 31 しかし 、 近年 で は 手話 と いえ ども れっきとした 言語 で ある ゆえ に 音声 語 と 同様 の 言語 学 的 手法 、 用語 によって 説明 できる はず で ある という 立場 が 一般 的 と なっ て いる
 32 近年 で は 言語 学 関連 の 学会 等 で 音声 言語 と共に 手話 言語 学者 の 研究 報告 が プログラム に のぼる こと も 珍しく ない
 33 より 広義 に は 視覚 言語 、 身体 言語 など 声 による コミュニケーション に  還元 でき ない 場合 に も 、 コミュニケーション を 統べる 規則 が あれ ば 、 そ れ を 言語 と 呼ぶ こと が ある
 34 また 、 動物 の 間 の 相互 作用 に も 言語 の 存在 を 認める 場合 が ある
 35 例えば ミツバチ が 蜜 源 を 仲間 に 伝える ため の ダンス を 「 ミツバチ の  言語 」 と 呼ぶ こと も ある
 36 ただし 、 人間 の 多く の 言語 と 比べ 、 動物 の 相互 作用 に は 、 往々 に し て 恣意 的 な 規則 ( 「 リンゴ 」 という 音 が リンゴ という 果物 の 種類 を 指す という 約束事 など ) が 乏しく 、 生息 環境 や 生 与 の 能力 に 根ざし た やや 必然 性 の 高い 表現 手段 が 関与 し て いる 場合 が 多い
 37 ( 「 歯 を むき出す こと 」 が 「 相手 に対する 敵意 」 の 表現 と なる 、  など ) これ は 規則 で は なく 、 単なる 規則 性 で ある 点 で やや 趣 を 異に する
 38 同じく 、 広義 の 言語 の 中 に 含ま れる こと が 多い の が コンピューター  の プログラミング に際して 参照 さ れる 一連 の 規則 ( プログラミング 言語 )  で ある
 39 プログラム の 機能 は 、 コミュニケーション の 一 種 で ある と 考える こと  は 不可能 で は ない として も 、 典型 的 な 人間 の 会話 において 言語 が 果た す 機能 と 明らか に 異なっ て いる
 40 また 、 規則 が 特定 少数 の 人間 によって 決定 さ れ て いる 点 で 狭義 の  言語 と 異なる
 41 この ため 、 プログラミング 言語 の よう に 創作 さ れ た 言語 を 人工 言語  と 呼び 、 日本語 の よう な 自然 言語 と 区別 する 場合 も ある
 42 == 自然 言語 ==
 
 厳密 に は 、 言語 の 定義 に は 多く の 困難 が 伴う
 43 コミュニケーション の 「 規則 」 が どこ か に 明記 さ れ て おり 人々 が そ れ を 参照 し ながら コミュニケーション が 行わ れる わけ で は なく 、 実際 人 々 が 単一 の 規則 に 従っ て い ない と 考え させる 材料 も ある
 44 方言 の よう な 地理 的 な バリエーション 、 新語 の 普及 の よう な 歴史 的 変化 、 言い 間違い や 言い かけ に 終わる 発言 など 、 文法 として 通常 考え られる 規則 に 反する 発話 など が 、 その 例 として 考え られる
 45 また 、 「 声 」 を 基礎 と し 、 文字 を その 代替 と する 発想 に対する 批 判 を 投げかける 立場 ( 『 声 と 現象 』 ) も ある ( 言語 哲学 )
 46 自然 言語 は 母語 として 使用 する 人々 の 存在 を 前提 として 存在 し て い る ため 、 民族 の 滅亡 や 他 言語 による 吸収 によって 使用 さ れ なく なる こ と が ある
 47 この よう な 言語 は 死語 と 呼ば れ 、 死語 が 再び 母語 として 使用 さ れる こと は ヘブライ 語 の 例 を 除け ば ほとんど ない
 48 近年 、 話者 数 が 非常 に 少ない 言語 が 他 言語 に 飲み込ま れ て 消滅 し  、 新た に 死語 と 化す こと が 問題 視 さ れる よう に なり 、 消滅 の 危機 に ある 言語 を 危機 言語 と 呼ぶ よう に なっ た
 49 これ は 、 世界 の 一体化 が 進み 、 交通 網 の 整備 や 流通 の 迅速 化 、 ラジオ ・ テレビ といった マスメディア の 発達 によって それ まで 孤立 を 保っ て い た 小さな 言語 が その コミュニティ を 維持 でき なく なる ため に 起こる と 考え られ て いる
 50 より 大きな 視点 で は 英語 の 国際 語 として の 勢力 伸張 による 他 主要 言 語 の 勢力 縮小 、 いわゆる 英語 帝国 主義 も これ に 含ま れる と いえる が 、 すくなくとも 21 世紀 初頭 において は 英語 を 母語 と する 民族 が 多数 派 を 占める 国家 を 除い て は 英語 の グローバル 化 が 言語 の 危機 に 直結 し て いる わけ で は ない

ここまでで見る限り、二重改行は「。」がなくても文(というよりはタイトル等)の単位を示しており、切れ目になる。タイトルは(次の文へ続いてはいないという意味で)1つの文として扱うべきだろう。

また、リスト項目のヘッダーである「*」も、文の切れ目を表す。

更に、「== 歴史 ==」や、「[[ アンパサンド ]]」に見られる項目ヘッダーも、切れ目に当たる。

これを見分けるロジックとして
 まず、行ごとに読む(改行符号で切る)
 行の先頭が「=」か[]」の場合、==XXX==や[[YYY]]の行であると判定する
   ==/==や[[/]]を取り除いて、行末までを1行と見なす
 行の先頭が「*」の場合、リストの項目「*XXXXXX」の行であると判定する
   先頭の*を取り除いて、行末までを1行とみなす
 上記3つ(=/[で始まるか、*で始まるか、それ以外)のいずれも、その1行の内容を「。」で分割して行にする。
としてみる。

プログラム案:
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 import sys, os
 import string, codecs
 import re
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 
 def nonnulstring(s):
   return s!=""
 def stripstring(s):
   return s.strip()
 
 out = []
 dirname = "/home/yamanouc/src/gensim/wp2txt"
 fn = "wp2wakati100.txt"
 text = open(os.path.join(dirname, fn)).readlines()
 # Check if one line contains only one period
 for s in text:
   strips = unicode(s).strip()
   if strips != "":
     ch = strips[0]
     if ch=='=':
       u = strips.strip("\n").strip("=").rstrip("=")
       p = u.split(u"。")
     elif ch=='[':
       u = strips.strip("\n").strip("[").rstrip("]")
       p = u.split(u"。")
     elif ch=='*':
       u = strips.strip("\n").strip("*")
       p = u.split(u"。")
     else:
       p = strips.split(u"。")
 
     out.extend(filter(nonnulstring, map(stripstring, p)))
     # 最後のmapはstripstringをpのすべての要素にapplyしてからextendで結合するため
 
 for u in out:
   print "<"+u+">"
結果は
 <アンパサンド>
 <CATEGORIES : 約 物 , ラテン語 の 語句>
 <アンパサンド ([ tpl ] lang | en | ampersand [/ tpl ], &) と は 「 … と … 」  を 意味 する 記号 で ある>
 <英語 の [ tpl ] lang | en |" and "[/ tpl ] に 相当 する ラテン語 の [ tpl ] lang | la |" et "[/ tpl ] の 合 字 で 、 [ tpl ] lang | en |" etc ."[/ tpl ] ( et cetera = and so forth ) を [ tpl ] lang | en |"& c ."[/ tpl ] と 記述 する こと  が ある の は その ため>
 <Trebuchet MS フォント で は 、 10 px と 表示 さ れ " et " の 合 字 で ある こと が 容易 に わかる>
 <歴史>
 <その 使用 は 1 世紀 に 遡る こと が でき ( 1 )、 5 世紀 中葉 ( 2 , 3 ) から 現 代 ( 4 - 6 ) に 至る まで の 変遷 が わかる>
 <Z に 続く ラテン 文字 アルファベット の 27 字 目 と さ れ た 時期 も ある>
 <記号 名 の 「 アンパサンド 」 は 、 ラテン語 の 「 & は それ 自身 " and " を 表す 」 [ tpl ] lang | la |(& per se and )[/ tpl ] から き て いる>
 <手書き>
 <日常 的 な 手書き の 場合 、 欧米 で アンパサンド は 「 ε 」 に 縦 線 を 引く 単純 化 さ れ た もの が 使わ れる こと が ある>
 <また 同様 に 、 「 t 」 または 「+( プラス ) 」 に 輪 を 重ね た よう な 、  無声 歯茎 側面 摩擦音 を 示す 発音 記号 「[ tpl ] IPA | ? [/ tpl ]」 の よう な もの が 使わ れる こと も ある>
 <プログラミング 言語>
 <プログラミング 言語 で は 、 C など 多数 の 言語 で AND 演算 子 として 用い ら れる>
 <以下 は C の 例>
 <X = A && B の よう に 2 個 重ね た もの は 論理 AND を 表す>
 <この 場合 A , B が ともに 真 なら ば X も 真 、 それ 以外 は 偽 で ある>
 <0 x 12345678 & 0 x 0 f 0 f 0 f 0 f の よう に 1 個 で あれ ば ビット AND を 表 す>
 <この 場合 の 結果 は 0 x 02040608 で ある>
 <BASIC 系列 の 言語 で は 文字 列 の 連結 演算 子 として 使用 さ れる>
 <" foo " & " bar " は " foobar " を 返す>
 <また 、 主 に マイクロソフト 系 で は 整数 の 十 六 進 表記 に & h を 用い 、 & h 0 F ( 十 進 で 15 ) の よう に 表現 する>
 <SGML 、 XML 、 HTML で は 、 アンパサンド を 使っ て SGML 実体 を 参照 する>
 <その他>
 <& ( シングル )( アンド ) は 、 浜崎 あゆみ が 2003 年 に 発売 し た 4 曲 入り マキシ シングル>
 <& ( 一 青 窈 の アルバム )( アンド ) は 、 一青 窈 が 2005 年 に 発売 し た  アルバム 、 及び 同 アルバム に 収録 さ れ た 楽曲>
 <& ( 漫画 )( アンド ) は 、 お かざ き 真 里 による 漫画 作品>
 <アンパサンド は 、 日本 の 競走 馬>
 <⇒ アンパサンド ( 競走 馬 )>
 <符号 位置>

さて、形式上は、文のタグ(番号でいいらしい)と、文を単語に分けたリスト、とのペアが、
文章全体でリストになっているものが欲しいらしいので、これならどうか?

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 import sys, os
 import string, codecs
 import re
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 
 def nonnulstring(s):
   return s!=""
 def stripstring(s):
   return s.strip()
 def splitstring(s):
   return s.split(" ")
 
 out = []
 dirname = "/home/yamanouc/src/gensim/wp2txt"
 fn = "wp2wakati100.txt"
 #fn = "xx.txt"
 print os.path.join(dirname, fn)
 text = open(os.path.join(dirname, fn)).readlines()
 # Check if one line contains only one period
 for s in text:
   strips = unicode(s).strip()
   if strips != "":
     ch = strips[0]
     if ch=='=':
       u = strips.strip("\n").strip("=").rstrip("=")
       p = u.split(u"。")
     elif ch=='[':
       u = strips.strip("\n").strip("[").rstrip("]")
       p = u.split(u"。")
     elif ch=='*':
       u = strips.strip("\n").strip("*")
       p = u.split(u"。")
     else:
       p = strips.split(u"。") 
 
     pp = map(stripstring, p)
     ppp = map(splitstring, filter(nonnulstring, pp))
     out.extend(ppp)
 
 for i, u in enumerate(out):
   print i,
   print "[",
   for v in u:
     print v,
   print "]"

出力は、
 0 [ アンパサンド ]
 1 [ CATEGORIES : 約 物 , ラテン語 の 語句 ]
 2 [ アンパサンド ([ tpl ] lang | en | ampersand [/ tpl ], &) と は 「 … と …  」 を 意味 する 記号 で ある ]
 3 [ 英語 の [ tpl ] lang | en |" and "[/ tpl ] に 相当 する ラテン語 の [ tpl ] lang | la |" et "[/ tpl ] の 合 字 で 、 [ tpl ] lang | en |" etc ."[/ tpl ] ( et cetera = and so forth ) を [ tpl ] lang | en |"& c ."[/ tpl ] と 記述 する こ と が ある の は その ため ]
 4 [ Trebuchet MS フォント で は 、 10 px と 表示 さ れ " et " の 合 字 で ある  こと が 容易 に わかる ]
 5 [ 歴史 ]
 6 [ その 使用 は 1 世紀 に 遡る こと が でき ( 1 )、 5 世紀 中葉 ( 2 , 3 ) から 現代 ( 4 - 6 ) に 至る まで の 変遷 が わかる ]
 7 [ Z に 続く ラテン 文字 アルファベット の 27 字 目 と さ れ た 時期 も ある ]
 8 [ 記号 名 の 「 アンパサンド 」 は 、 ラテン語 の 「 & は それ 自身 " and " を 表す 」 [ tpl ] lang | la |(& per se and )[/ tpl ] から き て いる ]
 9 [ 手書き ]
 10 [ 日常 的 な 手書き の 場合 、 欧米 で アンパサンド は 「 ε 」 に 縦 線 を  引く 単純 化 さ れ た もの が 使わ れる こと が ある ]
 11 [ また 同様 に 、 「 t 」 または 「+( プラス ) 」 に 輪 を 重ね た よう な 、 無声 歯茎 側面 摩擦音 を 示す 発音 記号 「[ tpl ] IPA | ? [/ tpl ]」 の よう な もの が 使わ れる こと も ある ]
 12 [ プログラミング 言語 ]
 13 [ プログラミング 言語 で は 、 C など 多数 の 言語 で AND 演算 子 として 用い られる ]
 14 [ 以下 は C の 例 ]
 15 [ X = A && B の よう に 2 個 重ね た もの は 論理 AND を 表す ]
 16 [ この 場合 A , B が ともに 真 なら ば X も 真 、 それ 以外 は 偽 で ある ]
 17 [ 0 x 12345678 & 0 x 0 f 0 f 0 f 0 f の よう に 1 個 で あれ ば ビット AND を 表す ]
 18 [ この 場合 の 結果 は 0 x 02040608 で ある ]
 19 [ BASIC 系列 の 言語 で は 文字 列 の 連結 演算 子 として 使用 さ れる ]
 20 [ " foo " & " bar " は " foobar " を 返す ]
 21 [ また 、 主 に マイクロソフト 系 で は 整数 の 十 六 進 表記 に & h を 用い 、 & h 0 F ( 十 進 で 15 ) の よう に 表現 する ]
 22 [ SGML 、 XML 、 HTML で は 、 アンパサンド を 使っ て SGML 実体 を 参照 する ]
 23 [ その他 ]
 24 [ & ( シングル )( アンド ) は 、 浜崎 あゆみ が 2003 年 に 発売 し た 4 曲 入り マキシ シングル ]
 25 [ & ( 一 青 窈 の アルバム )( アンド ) は 、 一青 窈 が 2005 年 に 発売 し た アルバム 、 及び 同 アルバム に 収録 さ れ た 楽曲 ]
 26 [ & ( 漫画 )( アンド ) は 、 お かざ き 真 里 による 漫画 作品 ]
 27 [ アンパサンド は 、 日本 の 競走 馬 ]
 28 [ ⇒ アンパサンド ( 競走 馬 ) ]
 29 [ 符号 位置 ]
 30 [ 言語 ]
 31 [ CATEGORIES : 言語 , 言語 学 , 民族 ]
 32 [ 言語 ( げん ご [ tpl ] lang - en - short | Language [/ tpl ]) と は 、 コミュニケーション の ため の 記号 の 体系 で ある ]
 33 [ 狭義 に は 人間 の 音声 による 音声 言語 を 指す が 、 広義 に は 身振り など 音声 以外 の 要素 も 含む ]
 34 [ また 、 動物 間 の コミュニケーション や 、 コンピュータ に 指示 する ため の 記号 体系 を 指す 場合 も ある ]
 35 [ 英語 や 日本語 や 中国 語 の よう に 自然 発生 的 に 生まれ た 言語 を 自然 言語 と 呼び 、 これ に対して 人為 的 に 創作 さ れ た 言語 を 人工 言語 と 呼 ぶ ]
 36 [ 後者 に は 、 もっぱら 人間 同士 による やりとり を 目的 と し た エスペラ ント 、 コンピュータ の 操作 を 目的 と し た プログラミング 言語 、 それから 人間 に も コンピュータ に も 適し た ロ ジバン といった もの が ある ]
 37 [ 自然 言語 は 、 母語 と する 人々 の 存在 を 失う と 使用 さ れ なく なり  死語 ( 廃語 ) と 呼ば れる ]
 38 [ 定義 ]
 39 [ 狭義 に は 、 人間 の コミュニケーション 、 相互 作用 を 統べる 規則 の 内 、 声 にまつわる 部分 、 あるいは その 声 の 代替 として の 文字 表記 など にま つわる 部分 を 指す ]
 40 [ 手話 、 トーキング ドラム など の 例 において も 、 おおよそ 声 による コミュニケーション と 対応 し て いる ]
 41 [ ただし 、 かつて 日本 の 手話 言語 学者 は 手話 は 音声 語 と は 形態 にお いて 異なる が ゆえに 、 音声 言語 学 と は まったく 異なる 言語 学 用語 、 文法 用語 によって 研究 さ れる べき で ある という 立場 を とっ て い た ]
 42 [ しかし 、 近年 で は 手話 と いえ ども れっきとした 言語 で ある ゆえ に 音声 語 と 同様 の 言語 学 的 手法 、 用語 によって 説明 できる はず で ある とい う 立場 が 一般 的 と なっ て いる ]
 43 [ 近年 で は 言語 学 関連 の 学会 等 で 音声 言語 と共に 手話 言語 学者 の 研究 報告 が プログラム に のぼる こと も 珍しく ない ]
 44 [ より 広義 に は 視覚 言語 、 身体 言語 など 声 による コミュニケーション に 還元 でき ない 場合 に も 、 コミュニケーション を 統べる 規則 が あれ ば 、 それ を 言語 と 呼ぶ こと が ある ]
 45 [ また 、 動物 の 間 の 相互 作用 に も 言語 の 存在 を 認める 場合 が ある ]
 46 [ 例えば ミツバチ が 蜜 源 を 仲間 に 伝える ため の ダンス を 「 ミツバチ の 言語 」 と 呼ぶ こと も ある ]
 47 [ ただし 、 人間 の 多く の 言語 と 比べ 、 動物 の 相互 作用 に は 、 往々  に し て 恣意 的 な 規則 ( 「 リンゴ 」 という 音 が リンゴ という 果物 の 種類 を 指す という 約束事 など ) が 乏しく 、 生息 環境 や 生 与 の 能力 に 根ざし た やや 必然 性 の 高い 表現 手段 が 関与 し て いる 場合 が 多い ]
 48 [ ( 「 歯 を むき出す こと 」 が 「 相手 に対する 敵意 」 の 表現 と なる 、 など ) これ は 規則 で は なく 、 単なる 規則 性 で ある 点 で やや 趣 を 異に する ]
 49 [ 同じく 、 広義 の 言語 の 中 に 含ま れる こと が 多い の が コンピューター の プログラミング に際して 参照 さ れる 一連 の 規則 ( プログラミング 言語 ) で ある ]
 50 [ プログラム の 機能 は 、 コミュニケーション の 一 種 で ある と 考える こと は 不可能 で は ない として も 、 典型 的 な 人間 の 会話 において 言語 が 果たす 機能 と 明らか に 異なっ て いる ]
 51 [ また 、 規則 が 特定 少数 の 人間 によって 決定 さ れ て いる 点 で 狭義 の 言語 と 異なる ]
 52 [ この ため 、 プログラミング 言語 の よう に 創作 さ れ た 言語 を 人工 言語 と 呼び 、 日本語 の よう な 自然 言語 と 区別 する 場合 も ある ]

***メソッドを使ってみる [#odce4474]
まず、分かち書きした本文のファイルを準備する。ただし、1行が1ドキュメント(1文)
とする。
 $ cat wiki2linedoc.py
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # d2v-learn
 
 import sys, os, codecs
 import string, re
 import gensim
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 
 def nonnulstring(s):
   return s!=""
 def stripstring(s):
   return s.strip()
 def splitstring(s):
   return s.split(" ")
 
 out = []
 dirname = "/home/yamanouc/src/gensim/wp2txt"
 #fn = "wp2wakati100.txt"
 fn = "wp2wakati.txt"
 print os.path.join(dirname, fn)
 text = open(os.path.join(dirname, fn)).readlines()
 '''
 ../wp2txt/wp2wakati.txtをきれいにすること 2016-02-29
 1)タイトル([―――])は文になっていないので、消す。
 2)CATEGORIES : ―――――― も消す
 3)段落タイトル == ――――― == も消す
 4)カッコに囲まれている部分を消す
   ( 1 )とか ([ tpl ] lang | en | ampersand [/ tpl ], &)
 5)「、」は消す
 6)『「』と『」』は消す(中身はそのまま残す)
 7)*は(箇条書き)消す、本文は残す
 8):は(注釈マーク)消す、本文は残す
 
 最後に、1単語しか無い文は、消す。
 '''
 pat_tpls = re.compile(r'\[ tpl \].*?\[/ tpl \]')
 pat_parens = re.compile(r'\(.*?\)')
 pat_paren2s = re.compile(u'(.*?)')
 pat_sqbrackets = re.compile(r'\[.*?\]')
 for s in text:
   strips = unicode(s).strip()
   strips = re.sub(pat_tpls, '', strips)
   strips = re.sub(pat_parens, '', strips)
   strips = re.sub(pat_paren2s, '', strips)
 
   if strips != "":
     ch = strips[0]
      if ch=='=':
       u = strips.strip("\n").strip("=").rstrip("=")
       p = u.split(u"。")
       p = []  # ignore this line
     elif ch=='[':
       u = re.sub(pat_sqbrackets, '', (strips.strip("\n")))
       p = u.split(u"。")
       p = []  # ignore this line
     elif ch=='C':
       if strips[0:12]=='CATEGORIES :':
         p = []
       else:
         p = u.split(u"。")
     elif (ch=='*') or (ch==':') or (ch==';'):
       u = strips.strip("\n").strip("*")
       p = u.split(u"。")
       p = []
     else:
       p = strips.split(u"。")
 
     p = filter(lambda a: a!=u"、", p)
     pp = map(stripstring, p)
     ppp = map(splitstring, filter(nonnulstring, pp))
     out.extend(ppp)
 
 fout = open("wikiline.txt", "w")
 #fout = open("wikiline100.txt", "w")
 for u in out:
   for v in u:
     print >> fout, v,
   print >> fout
 fout.close()


次に、この出力ファイルを、次のプログラムに食わせてdoc2vecをトレーニングする。
 # まずPlainLineDocumentフォーマットからTaggedLineDocumentフォーマットに変換
 docsrc = gensim.models.doc2vec.TaggedLineDocument('wikiline.txt')
 # 次に、トレーニング
 m = gensim.models.doc2vec.Doc2Vec(docsrc, size=100, window=8, min_count=2, workers=4)
 # モデルmをセーブする
 m.save("mymodel")

モデルを使うメソッドの実験 [[ドキュメント参照:https://radimrehurek.com/gensim/models/doc2vec.html]]
 >>> m.similarity(u'また',u'も')
 0.52648741466034554
 
 >>> x = m.most_similar(u'また')
 >>> for u in x:
 ...   for v in u:
 ...     print v,
 ...
 さ 0.721945047379 点 0.68540096283 考え 0.682420969009 問題 0.6818805933 もの 0.675799548626 う 0.673263430595 基準 0.660309076309 例 0.648306429386 さらに 0.635699748993 なり 0.629096627235

これは、単語に対するsimilarityらしい。文(doc)については、
 >>> sims = m.docvecs.most_similar(1)       文ラベル1に似ている文上位10個を出せ
 >>> sims
 [(96, 0.3002694249153137), (81, 0.29771459102630615), (115, 0.27464723587036133), (54, 0.24800336360931396), (112, 0.23777592182159424), (78, 0.2362814098596573), (16, 0.22363528609275818), (47, 0.21590390801429749), (30, 0.20214730501174927), (56, 0.19432753324508667)]
多分、ラベル96番が0.30で似ている…など。

ラベルは、今の場合は入力の行番号に相当するようにしているため(1から最後の行まで)、それを使えばいいらしい。

では、文番号を与えて、類似文を出力する、というプログラムを作ってみる。但し、doc2vecでは入力も出力もラベルで、読みにくいので、元の文を表示するようにする。リストインデックスが、doc2vecでは1からなのに、プログラム内では0からであることに注意。

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # d2v-similar
 # モデルを読み込んで、キー入力した文にsimilarな文を探す
 import sys, os
 import string, codecs
 import logging
 import gensim
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 fn = 'wikiline'
 modelfile = fn + '.mdl '
 textfile = fn + '.txt' 
 logging.basicConfig(format='%(levelname)s:%(message)s', filename=fn +'.log',  filemode='w', level=logging.INFO)
 logging.info("running %s" % ' '.join(sys.argv))
 
 # まずfn.mdlからロード
 m = gensim.models.doc2vec.Doc2Vec.load(modelfile)
 logging.info("wikiline.mdl loaded")
 
 # テキストファイルもロード
 tx = open(textfile, 'r').readlines()
 ln = len(tx )   # 何回も使うので覚えておくことにする
 logging.info("wikiline.txt loaded")
 
 while True:
   str = raw_input('Enter docnumber (1..max): ')
   if str == 'q':
     quit()
   else:
     if str.isdigit():
       snum = int(str)
       if snum in range(1, ln+1):
         print 'input', snum, tx[snum-1]
       else:
         print 'input', snum, 'out fo range', ln+1
         break
       sims = m.docvecs.most_similar(snum, topn=3)
       for u in sims:
         print u
         id = u[0]
         if id in range(1, ln+1):
           print u[0], u[1], tx[id-1]
         else:
           print 'index', id, 'out of range', ln+1

試してみた結果は、次の通り。(文のラベルは現在のものと違うのでそのままは試せない)
Enter docnumber (1..max): 600663
 input 600663 空気 の 比重 と 比較 する と 1 . 5 倍 重く 、 プロパン が 漏洩 する と 床 面 に 滞留 する
 
 (9465258, 0.5497746467590332)
 9465258 0.549774646759 内 視 鏡 等 で 病変 部 を ブラシ 等 で 擦り 取っ た 細胞 診 検体 について 病理 診断 を 行う
 
 (5064362, 0.5443246960639954)
 5064362 0.544324696064 肺 動脈 カテーテル  と は 、 カテーテル の 一つ
 
 (469203, 0.5255934000015259)
 469203 0.525593400002 動作 温度 は 200 ℃ 程度 で 、 発電 効率 は 、 約 40 % LHV
------
 Enter docnumber (1..max): 1584468
 input 1584468 目的 物 を 溶解 し た 超 臨界 二酸化炭素 を 臨界 点 以下 に する  と 、 二酸化炭素 は 気化 する ので 、 後 に は 溶質 のみ が 残る
 
 (3722888, 0.5738210678100586)
 3722888 0.57382106781 太陽系 内 に 存在 する 塵 の うち 、 比較的 小さな  サイズ の もの で ある と 考え られ て いる
 
 (2011342, 0.57314133644104)
 2011342 0.573141336441 逆 に 高速 中性子 は ウラン 235 や プルトニウム の 核分裂 を 誘起 し にくい が 、 ウラン 238 に 捕獲 さ れ て プルトニウム 239 を 生成 する 確率 が 高い
 
 (8445795, 0.5617737770080566)
 8445795 0.561773777008 その後 地質 学 と 古 生物 学 の 進歩 により 、 縞 状 鉄鉱 床 は 太古 の シアノバクテリア の 光合成 で 出来 た 酸素 が 当時 海中 に 大量  に 溶解 し て い た 鉄 イオン を 酸化 し て 不溶化 ・ 沈殿 し た もの と 考え られる よう に なっ た
------
 Enter docnumber (1..max): 748308
 input 748308 加え て 、 トルコ が キプロス を 独立 国 として 承認 する こと も  トルコ の EU 加入 の 基本 的 前提 と 見なし て いる
 
 (3509839, 0.5045762658119202)
 3509839 0.504576265812 「 しんみり やる の は 橋本 に 似合わ ない 、 明るく 楽しく 追悼 を やろ う 」 と し 、 過去 の 試合 映像 や 出演 者 による 橋本 がらみ  の 爆笑 トーク 、 さらに は 橋本 が かつて 雑誌 に 掲載 し た 下 ネタ の 数々 を 大 暴露 など が 繰り広げ られ 、 涙 一つ 無い カラッ と し た 追悼 番組 と なっ た
 
 (825441, 0.49187928438186646)
 825441 0.491879284382 リチャード ・ ブロディ の 考察 する 「 マインド ・ ウイル ス から の 治療 」 を 以下 に 述べる
 
 (11963480, 0.48931217193603516)
 11963480 0.489312171936 この ため 、 アメリカ は 宇宙 技術 を ブラジル へ 移転  さ せる こと に 制限 を かけ 、 これ によって ブラジル の VLS 計画 と 弾道 ミサ イル の 研究 開発 を 遅らせる こと に 成功 し た
------
 Enter docnumber (1..max): 13516381
 input 13516381 菓子 戦争   は 、 1838 年 に 起き た フランス の メキシコ へ の  干渉 戦争 で ある
 
 (278310, 0.5964555740356445)
 278310 0.596455574036 現代
 
 (1196862, 0.5904451608657837)
 1196862 0.590445160866 フランス へ の 接近 は 失敗 に 終わり 、 イギリス や オーストリア と は 強い 敵対 関係 から 脱却 する こと は なかっ た
 
 (5305407, 0.5466333627700806)
 5305407 0.54663336277 この ニュース が 9 月 16 日 深夜 に ドローレス 村 に 伝わ る と 、 イダルゴ は 演説 を 行い  、 先住民 や 混血 民 を 中心 と する 周辺 住 民 を 率い て 武装 蜂起 を 起こし た
------
 Enter docnumber (1..max): 748309
 input 748309 トルコ が 現時点 で EU 加盟 交渉 を 申し出る なら ば 、 自動的 に  その プロセス が 動き出す こと に キリスト教 民主 同盟 を 遺憾 な こと と 見なし て いる
 
 (6491171, 0.5381110906600952)
 6491171 0.53811109066 龍徳  は 五 代 の 最初 の 王朝 で ある 後 梁 において 朱  友 貞 の 治世 で 用い られ た 元号
 
 (10135542, 0.53679358959198)
 10135542 0.536793589592 File : Albarracin - Vista 03 . jpg | アルバラシン 城
 
 (883490, 0.5353686213493347)
 883490 0.535368621349 2005 年 の 選挙 における 勢力 図 は 、 全 51 議席 中 15 議席 が 民主 統一 党 、 14 議席 が シン・フェイン 、 8 議席 が 社会民主労働党 、 7 議席 が アルスター 統一 党 、 4 議席 が 北アイルランド 同盟 党 、 2 議席 が 進 歩 統一 党 、 1 議席 が 無所属 と なっ て いる



では、コーパスに含まれない文を対象として、似ている文を探すとしたら、どうするか?含まれない文のベクトルを推定するのだそうである。~
まず、対象とする文を分かち書きし、リストにしておく。~
次に、ロードしておいたモデルmを使って、m.infer_vector(対象となる文)でベクトルを推定する。xがベクトル。~
このベクトルxをリストにして、most_similarに食わせる。

 m = gensim.models.doc2vec.Doc2Vec.load("wikiline-old/wikiline.mdl")
 t = open('input.txt', 'r').read()
 tt = t.split(' ')
 x = m.infer_vector(tt)
 m.docvecs.most_similar([x])
 [(9676611, 0.5057333707809448), (12730130, 0.49067118763923645), (18446111, 0.4890895485877991),
 (19965216, 0.4889296889305115), (285058, 0.4787384867668152), (11928745, 0.4665689170360565),
 (9368967, 0.46571487188339233), (55053, 0.46511825919151306), (6633273, 0.4633559286594391), (3504017, 0.46202734112739563)]

プログラムとしては、
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # d2v-infer
 # モデルを読み込んで、キー入力した文にsimilarな文を探す
 import sys, os
 import string, codecs
 import logging
 import MeCab
 import gensim
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 fn = '/wikiline'
 modelfile = fn + '.mdl'
 textfile = fn + '.txt'
 inputfile = 'input.txt'
 tagger = MeCab.Tagger("-Owakati")
 logging.basicConfig(format='%(levelname)s:%(message)s', filename=fn +'.log', filemode='w', level=logging.INFO)
 logging.info("running %s" % ' '.join(sys.argv))
 # 対象となる文を入力
 tinput = open(inputfile, 'r').read()
 res = tagger.parse(tinput).split(' ')
 
 # まずfn.mdlからロード
 m = gensim.models.doc2vec.Doc2Vec.load(modelfile)
 logging.info(modelfile + " loaded")
 # コーパステキストファイルもロード
 tx = open(textfile, 'r').readlines()
 ln = len(tx)
 logging.info(textfile + " loaded")
 
 x = m.infer_vector(res)
 sims = m.docvecs.most_similar([x], topn=3)
 
 #print tinput
 for u in sims:
   print u
   id = u[0]
   if id in range(1, ln+1):
     print u[0], u[1], tx[id-1]
   else:
     print 'index', id, 'out of range', ln+1


実行例としては
 Enter document: 目的 物 を 溶解 し た 超 臨界 二酸化炭素 を 臨界 点 以下 に する  と 、 二酸化炭素 は 気化 する ので 、 後 に は 溶質 のみ が 残る
 
 (9516399, 0.4778631925582886)
 9516399 0.477863192558 マグマ が 均等 に 混ざり 合っ て い ない ため 、 肉眼 で 確認 できる 色 ムラ が 多い
 
 (7328463, 0.4674248695373535)
 7328463 0.467424869537 車 部  は 、 漢字 を 部首 により 分類 し た グループ の  一つ
 
 (8847064, 0.46157771348953247)
 8847064 0.46157771349 経済 的 な 豊か さ を 失い 、 また 刑務所 に 入ら ざる を 得 なく なっ た こと で 、 妻 の 気持ち が 離れ て いく の で は と 不安 を 感じ 、 婚姻 後 契約 に サイン さ せよ う と 躍起 に なる
-----
 Enter document: その後、前の文章を一定数加えて、深層学習ネットワークに与えるコンテクストを増やすことで、エラー率は12.8パーセントに低下した。
その後 、 前 の 文章 を 一 定数 加え て 、 深層 学習 ネットワーク に 与える コンテクスト を 増やす こと で 、 エラー 率 は 12 . 8 パーセント に 低下 し た 。
 
 (11960894, 0.7057925462722778)
 11960894 0.705792546272 0102030405060 __ 64
 
 (12038157, 0.7037415504455566)
 12038157 0.703741550446 カスケード 地震  と は 、 1700 年 に カスケード 沈み 込 み 帯 で 発生 し た プレート 間 地震
 
 (9801953, 0.7021126747131348)
 9801953 0.702112674713 また デュスポンテウス 、 レウキッポス という 子供 も い  た パウサニアス 、 6 巻 22 ・ 4
-----
 Enter document: ギリシャ北部イドメニ近くで2月29日、隣国マケドニアへの入国を阻まれた難民らが、「国境を開けろ」と抗議し、国境を隔てるフェンスの一部を破壊した。
ギリシャ 北部 イドメニ 近く で 2月 2 9 日 、 隣国 マケドニア へ の 入国 を 阻ま れ た 難民 ら が 、 「 国境 を 開けろ 」 と 抗議 し 、 国境 を 隔てる フェン ス の 一部 を 破壊 し た 。
 
 (13129958, 0.5039729475975037)
 13129958 0.503972947598 この 頃 は 東京 駅 に 東北 ・ 高崎 ・ 常磐線 方面 の 優 等 列車 や 一部 普通 列車 が 乗り入れ て き て い た が 、 これ を 上野 で 打ち 切り と する ため に 上野 駅 の 信号 扱所 の 改良 や 上野 - 秋葉原 間 に 留置 線 の 設置 など を 行っ た
 
 (11366359, 0.48808348178863525)
 11366359 0.488083481789 マンガ 大賞 2011 ノミネート 作品
 
 (3920078, 0.48360785841941833)
 3920078 0.483607858419 その 理由 は 非核 三 原則 に ある と いわ れ て いる
-----

ちょっとひどいので、ベクトルを見てみよう。学修インプットの2829870番は

 input 2829870 就職 協定 の 廃止 で 、 一 人 の 学生 が 好き な だけ 企業 を 受ける こと が 可能 に なり 、 メガ バンク や 大手 メーカー 、 総合 商社 、 航空 会 社 など 大手 企業 へ の 採用 希望 者 は 採用 枠 の 数 百 倍 に 及び 、 就職 活動 は 大変 な 競争 に なっ て いる
で、ベクトルはmodel mに対して
 docvec = m.docvecs[2829870]
のようにして求められ、結果は
 [  2.70725712e-02  -1.09555796e-02  -1.43752876e-03  -1.73138492e-02
   -3.11725382e-02   3.07186376e-02   8.30257777e-04  -7.10208248e-03
    2.82094311e-02   5.56313084e-04  -4.91549901e-04  -1.49699105e-02
    1.49976322e-02   6.49759686e-03  -4.62192530e-03   5.50931646e-03
   -1.84843168e-02   1.47961592e-02  -3.40345018e-02   3.67669901e-03
   -1.31875603e-03   6.53400784e-04  -1.91361122e-02  -2.94732898e-02
   -1.57050993e-02   2.20924690e-02  -5.10963276e-02   6.66505471e-03
   -6.70290971e-03   5.01292851e-03  -1.71229895e-02  -1.78080611e-02
    3.64091154e-03   1.56630296e-02  -2.13953224e-03  -3.31232622e-02
    1.10719074e-02  -1.10598300e-02   3.53100128e-03   1.71722821e-03
    2.54796073e-02  -7.20596826e-03  -4.48142551e-03   2.07756902e-03
   -1.88357048e-02   4.68995236e-03   1.74551867e-02  -8.45194235e-03
    6.21951278e-03  -1.92035269e-02   2.99730226e-02  -5.51482243e-03
    2.21268311e-02  -2.16611829e-02   1.08466372e-02  -6.93102414e-03
   -1.67360883e-02  -1.73111577e-02  -1.97991785e-02  -2.50764303e-02
   -1.47786206e-02   4.18037809e-02   1.23536540e-03  -1.21584460e-02
    1.81635898e-02   2.74090264e-02   1.25256926e-02  -1.55170076e-03
   -3.09601519e-02  -3.53862671e-03   4.18147966e-02  -2.22106222e-02
    3.12998891e-05  -1.81499962e-02  -1.61217451e-02  -1.66588812e-03
   -1.94112118e-02   1.94422137e-02   6.77700387e-03   5.77046769e-03
    1.60953496e-02  -1.79610774e-02   7.01069366e-03   2.18397230e-02
   -3.83354258e-03   1.38859674e-02  -2.25692503e-02  -2.30627637e-02
   -3.08487210e-02  -1.30082304e-02  -4.02169116e-03  -5.35247587e-02
    3.12663917e-03   1.69167053e-02  -1.45197921e-02  -5.25621045e-03
    8.35896563e-03  -1.01675466e-03   2.11138129e-02   1.49480987e-03]
 ベクトル長 0.184573662718
である。

他方、inferを使った結果は、モデルmに対して
 m.infer_vector(上記入力・分かち書き済み)
として求められ、得られたのは
 [ -4.04663570e-03   4.29494074e-03  -4.69312072e-03   1.18081080e-04
   -3.82805127e-03  -1.07163494e-03  -3.15546500e-03   3.22997267e-03
   -2.77433312e-03  -2.10964098e-03  -2.73808278e-03  -1.40800537e-03
   -4.07055393e-03  -3.35528958e-03  -2.91172694e-03  -2.02175230e-03
    3.15722614e-03   1.77908025e-03   1.75582827e-04   4.56622016e-04
    2.80669820e-03  -4.05332539e-03   3.68401199e-03   3.61603568e-03
   -2.23542540e-03  -2.99533334e-04  -2.74013873e-04  -4.30325652e-03
   -1.52190565e-03   4.05399455e-03  -1.94868329e-03  -2.70010484e-03
    2.46516778e-03  -3.57269775e-03  -4.69692936e-03   3.89689300e-03
    1.11687439e-03  -2.01787497e-03   3.13752773e-03   1.23704772e-03
   -1.27735175e-03   2.64216005e-03  -3.49440123e-03  -3.83393629e-03
    3.59861809e-03  -4.92782285e-03   2.91941618e-03  -2.28545466e-03
   -2.87414005e-04  -5.27327240e-04   1.11788849e-03   1.22979563e-03
    3.81763605e-03   1.15663395e-03   2.99760373e-03   3.87212704e-03
    3.00246757e-03  -5.29913814e-04  -7.89989601e-04  -1.90835982e-03
   -1.88713276e-03   1.63389719e-03  -2.14963639e-03  -4.54933802e-03
   -3.49105569e-03  -1.07064249e-03  -2.08491320e-03   9.96704912e-04
   -4.80279420e-03  -1.89775997e-03   1.69726240e-03   1.58828648e-03
   -4.39950405e-03   3.21737956e-04  -1.75434037e-03   2.66395858e-03
   -3.56595358e-03   3.45569383e-03   7.74049331e-05  -4.75325016e-03
    2.77677947e-03   4.72891657e-03   4.84010158e-03  -3.66149331e-03
    4.75656940e-03   4.60036146e-03  -9.08899878e-04   1.58582255e-03
    4.38438402e-03  -2.34695361e-03   2.57047988e-03   4.19473829e-04
    4.52254852e-03  -4.29722527e-03  -1.76773279e-03  -9.50096699e-04
   -1.84802583e-03   1.88604766e-03   1.21229456e-03  -5.94382407e-04]
 ベクトル長 0.0290732863264
である。 ⇒⇒ つづきは [[ノート/テキストマイニング/Doc2Vecを試す・その2]]

もう少し、
-[[gensim doc2vec & IMDB sentiment dataset:https://github.com/piskvorky/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb]] 新しいAPIだと言っている(0.12.?)
-[["Distributed Representations of Sentences and Documents" Code?:https://groups.google.com/forum/#!msg/word2vec-toolkit/Q49FIrNOQRo/J6KG8mUj45sJ]] GitHub上のディスカッションボードでのやりとり
の辺を読み直す必要ありそう。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS