SlideShare a Scribd company logo
1 of 11
Download to read offline
Gensim
August 9, 2014
1 / 11
次元削減
文書-単語行列が巨大な疎行列になって手に負えない!
「ねこ」と「にゃんこ」(同義語) を同一視したい!
人名の「田中」と地名の「田中」(多義語) を別物だとみなしたい!
⇨ 次元削減 (dimensionality reduction) を利用 (e.g. クラスタリング、ト
ピックモデル)
2 / 11
Gensim
Gensim
トピックモデル (pLSA, LDA) や deep learning(word2vec) を簡単に使えるラ
イブラリ [2][3]
公式サイトの tutorial は若干分かりにくいです
使い方は [4] や [1] に詳しい
Figure: Mentioned by the author:)
3 / 11
Gensim
Gensim
公式サイトの tutorial は若干分かりにくいです
使い方は [4] や [1] に詳しい
..........
..........
..........
..........
..........
..........
System
and human
system
documents
..........
..........
..........
..........
..........
..........
['system',
'and'
'human']
texts
形態素解析
{'and': 19,
'minors': 37, ...}
dic = corpora.Dictonary()
..........
..........
..........
..........
..........
..........
[(10, 2),
(19, 1),
(3, 1), ...]
corpus
dic.doc2bow()
辞書とtf値を対応付け
dic.save()
dict.dic
MmCorpus
.serialize()
corpus.mm
tf・idf
LSALSA
LDA
HDP
RP
log
entropy
word
2vec
models
model
.save()
lda.model
dic.load() MmCorpus()
model
.load()
similarities
文書の類似性判定
lda.model
topic
extraction
model
.show_topics()
文書のトピック抽出
Figure: Gensim を使った処理の一例
4 / 11
Gensim
Step0. documents
元の文書をリスト型で準備
1 # 元の文書
2 documents = [
3 ”Human machine interface for lab abc computer applications”,
4 ”A survey of user opinion of computer system response time”,
5 ”The EPS user interface management system”,
6 ”System and human system engineering testing of EPS”,
7 ”Relation of user perceived response time to error measurement”,
8 ”The generation of random binary unordered trees”,
9 ”The intersection graph of paths in trees”,
10 ”Graph minors IV Widths of trees and well quasi ordering”,
11 ”Graph minors A survey”]
5 / 11
Gensim
Step1. 形態素解析
1 def parse(doc):
2 # 日本語なら形態素解析
3 # stopwordを除去する
4 stoplist = set(’for a of the and to in’.split())
5 text = [word for word in doc.lower().split() if word not in stoplist]
6 return text
7
8 texts = [[w for w in parse(doc)] for doc in documents]
9 print texts
10 ’’’ [
11 [’human’, ’machine’, ’interface’, ...],
12 [’a’, ’survey’, ’of’, ’user’, ...],
13 ...] ’’’
6 / 11
Gensim
Step2. 辞書を作成
1 dic = corpora.Dictionary(texts)
2 # 巨大なデータに対しては時間がかかるので保存。
3 dic.save(’dict.dic’)
4 # dic.load(’dict.dic’) で読み込み。
5
6 print dic.token2id
7 # {’and’: 19, ’minors’: 37, ’generation’: 28, ...}
8 print dic[19]
9 # ’and’が出力される。
7 / 11
Gensim
Step3. コーパスを作成
1 # 作成した辞書を使って、文書を変換
2 new_doc = ”Human computer interaction”
3 new_vec = dic.doc2bow(parse(new_doc))
4 print new_vec
5 # ”interaction”は辞書にないので無視される
6 # [(2, 1), (4, 1)]
7
8 # 同様にして、最初の文書集合に対してcorpus(文書−単語行列)を作成
9 # ここでは、単純なtf値からなる文書−単語行列を作成
10 corpus = [dic.doc2bow(text) for text in texts]
11 print corpus
12 # 巨大なデータに対しては時間がかかるので保存。
13 # Matrix Market形式で corpusを保存。他の形式でも良い。
14 corpora.MmCorpus.serialize(’corpus.mm’, corpus)
15 # 保存した corpusを読み込むとき
16 # corpus = corpora.MmCorpus(’corpus.mm’)
17
18 # 作成したコーパスで類似度を測る
19 index = similarities.docsim.SparseMatrixSimilarity(corpus, num_features=len(dic))
20 # クエリを特徴ベクトルで表現
21 query = [(0,1),(4,1)]
22 # queryと類似するもの上位 10件を出力
23 print sorted(enumerate(index[query]), reverse=True, key=lambda x:x[1])[:10]
8 / 11
Gensim
Step4. モデルを適用 (tf・idf)
1 m = models.TfidfModel(corpus)
2 # tf・idf値からなる文書−単語行列を作成
3 # m[corpus[0]] で 0番目の文書の特徴ベクトルになる
4 corpus = m[corpus]
5 # m[corpus]は再びコーパスとして使用可能
Step5. トピックモデルを適用
1 # topic数は 200−500くらいが普通?
2 m = models.LdaModel(corpus, id2word = dic, num_topics = 3)
3 # 巨大なデータに対しては時間がかかるので保存。
4 m.save(’lda.model’)
5 # m[corpus[i]] に含まれる tupleは、文書iが topic jに属する確率 P(t_j | d_i) を表す
6
7 # 得られた topicとその成分を表示
8 for n in range(0, m.num_topics):
9 # formatted=Trueとすると、線型モデルで表示
10 print m.show_topics(formatted=False)
9 / 11
Gensim
出力されたトピック
topic1 = 0.097 ∗ system + 0.068 ∗ eps + 0.055 ∗ human + 0.054 ∗ interface
+ 0.040 ∗ trees + 0.040 ∗ user + 0.039 ∗ engineering
+ 0.039 ∗ management + 0.039 ∗ testing + 0.039 ∗ binary
topic2 = 0.077 ∗ graph + 0.074 ∗ trees + 0.046 ∗ minors + 0.043 ∗ response
+ 0.043 ∗ ordering + 0.043 ∗ well + 0.043 ∗ iv + 0.043 ∗ quasi
+ 0.043 ∗ widths + 0.042 ∗ user
topic3 = 0.081 ∗ computer + 0.060 ∗ user + 0.060 ∗ system + 0.060 ∗ survey
+ 0.059 ∗ time + 0.058 ∗ response + 0.058 ∗ opinion + 0.038 ∗ lab
+ 0.037 ∗ abc + 0.037 ∗ machine
10 / 11
Reference I
Python 用のトピックモデルのライブラリ gensim の使い方 (主に日本語のテキストの読み込み)
- 唯物是真 @Scaled_Wurm. url:
http://sucrose.hatenablog.com/entry/2013/10/29/001041.
Radim Řehůřek. gensim: Topic modelling for humans. url:
http://radimrehurek.com/gensim.
Radim Řehůřek. “Software Framework for Topic Modelling with Large Corpora”. In:
Proceedings of the LREC 2010 Workshop on New Challenges for NLP Frameworks. 2010,
pp. 45–50. url: http://www.muni.cz/research/publications/884893.
高橋 侑久. LSI や LDA を手軽に試せる Gensim を使った自然言語処理入門 - SELECT *
FROM life; url: http://yuku-tech.hatenablog.com/entry/20110623/1308810518.
11 / 11

More Related Content

What's hot

機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターン機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターンHironoriTAKEUCHI1
 
劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章Hakky St
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013Shuyo Nakatani
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAGIRobots
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)Kentaro Minami
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデルMasahiro Suzuki
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018Takahiro Kubo
 
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジーKLab Inc. / Tech
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 
3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布Junya Saito
 
Counterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイCounterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイARISE analytics
 
DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...
DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...
DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...harmonylab
 
【DL輪読会】"A Generalist Agent"
【DL輪読会】"A Generalist Agent"【DL輪読会】"A Generalist Agent"
【DL輪読会】"A Generalist Agent"Deep Learning JP
 
機械学習と深層学習入門
機械学習と深層学習入門機械学習と深層学習入門
機械学習と深層学習入門Yuta Takahashi
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門Kawamoto_Kazuhiko
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)Shota Imai
 

What's hot (20)

機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターン機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターン
 
劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018
 
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布
 
Counterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイCounterfaual Machine Learning(CFML)のサーベイ
Counterfaual Machine Learning(CFML)のサーベイ
 
DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...
DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...
DeBERTaV3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-D...
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
【DL輪読会】"A Generalist Agent"
【DL輪読会】"A Generalist Agent"【DL輪読会】"A Generalist Agent"
【DL輪読会】"A Generalist Agent"
 
機械学習と深層学習入門
機械学習と深層学習入門機械学習と深層学習入門
機械学習と深層学習入門
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
 

Viewers also liked

10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境Hisao Soyama
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集Hikaru Takemura
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjpShinichi Nakagawa
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門Hironori Sekine
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Etsuji Nakai
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようHiroshi Funai
 
RとPythonによるデータ解析入門
RとPythonによるデータ解析入門RとPythonによるデータ解析入門
RとPythonによるデータ解析入門Atsushi Hayakawa
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Takami Sato
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングYuichi Ito
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?hoxo_m
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Tatsuya Tojima
 
コミュニケーション
コミュニケーションコミュニケーション
コミュニケーションsaireya _
 
メディア・リテラシー実習
メディア・リテラシー実習メディア・リテラシー実習
メディア・リテラシー実習saireya _
 
BADUIからユニバーサルデザインへ展開するデザイン教育実践
BADUIからユニバーサルデザインへ展開するデザイン教育実践BADUIからユニバーサルデザインへ展開するデザイン教育実践
BADUIからユニバーサルデザインへ展開するデザイン教育実践saireya _
 
メディア・リテラシー
メディア・リテラシーメディア・リテラシー
メディア・リテラシーsaireya _
 

Viewers also liked (20)

10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしよう
 
RとPythonによるデータ解析入門
RとPythonによるデータ解析入門RとPythonによるデータ解析入門
RとPythonによるデータ解析入門
 
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
 
コミュニケーション
コミュニケーションコミュニケーション
コミュニケーション
 
メディア・リテラシー実習
メディア・リテラシー実習メディア・リテラシー実習
メディア・リテラシー実習
 
著作権
著作権著作権
著作権
 
BADUIからユニバーサルデザインへ展開するデザイン教育実践
BADUIからユニバーサルデザインへ展開するデザイン教育実践BADUIからユニバーサルデザインへ展開するデザイン教育実践
BADUIからユニバーサルデザインへ展開するデザイン教育実践
 
メディア・リテラシー
メディア・リテラシーメディア・リテラシー
メディア・リテラシー
 

Similar to Gensim

初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)Masahiro Hayashi
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISPMasaomi CHIBA
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„和弘 井之上
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介fukuoka.ex
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)Masahiro Hayashi
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話bleis tift
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」fukuoka.ex
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)Masanori Machii
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Takuya Tsuchida
 
本当にあった怖い話し Db編
本当にあった怖い話し Db編本当にあった怖い話し Db編
本当にあった怖い話し Db編Oda Shinsuke
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す - DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す - kumamidori
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門Yohei Sasaki
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 

Similar to Gensim (20)

初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
 
本当にあった怖い話し Db編
本当にあった怖い話し Db編本当にあった怖い話し Db編
本当にあった怖い話し Db編
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す - DSLを学ぶ - 設定式によるルールの表現を試す -
DSLを学ぶ - 設定式によるルールの表現を試す -
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 

More from saireya _

文章作成の基礎
文章作成の基礎文章作成の基礎
文章作成の基礎saireya _
 
Peirceの探究段階論に基づく「情報I, II」の授業設計
Peirceの探究段階論に基づく「情報I, II」の授業設計Peirceの探究段階論に基づく「情報I, II」の授業設計
Peirceの探究段階論に基づく「情報I, II」の授業設計saireya _
 
Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析
Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析
Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析saireya _
 
テーマ設定・文献読解
テーマ設定・文献読解テーマ設定・文献読解
テーマ設定・文献読解saireya _
 
実験レポートの書き方
実験レポートの書き方実験レポートの書き方
実験レポートの書き方saireya _
 
実験ノートの書き方
実験ノートの書き方実験ノートの書き方
実験ノートの書き方saireya _
 
コミュニケーション(2020ver)
コミュニケーション(2020ver)コミュニケーション(2020ver)
コミュニケーション(2020ver)saireya _
 
情報(2020ver)
情報(2020ver)情報(2020ver)
情報(2020ver)saireya _
 
表現と内容
表現と内容表現と内容
表現と内容saireya _
 
人間と機械
人間と機械人間と機械
人間と機械saireya _
 
創発(2020ver)
創発(2020ver)創発(2020ver)
創発(2020ver)saireya _
 
セキュリティ(2020ver)
セキュリティ(2020ver)セキュリティ(2020ver)
セキュリティ(2020ver)saireya _
 
介入としての側面に焦点化したプレゼンテーションの教育実践
介入としての側面に焦点化したプレゼンテーションの教育実践介入としての側面に焦点化したプレゼンテーションの教育実践
介入としての側面に焦点化したプレゼンテーションの教育実践saireya _
 
社会のイノベーションを志向する情報教育の体系化
社会のイノベーションを志向する情報教育の体系化社会のイノベーションを志向する情報教育の体系化
社会のイノベーションを志向する情報教育の体系化saireya _
 
社会システム理論に基づく情報教育の教材開発
社会システム理論に基づく情報教育の教材開発社会システム理論に基づく情報教育の教材開発
社会システム理論に基づく情報教育の教材開発saireya _
 
システム論に基づく情報教育の授業計画と教育実践
システム論に基づく情報教育の授業計画と教育実践システム論に基づく情報教育の授業計画と教育実践
システム論に基づく情報教育の授業計画と教育実践saireya _
 
プログラミング
プログラミングプログラミング
プログラミングsaireya _
 
コミュニケーション・情報・メディアの統合モデルに基づく教育実践
コミュニケーション・情報・メディアの統合モデルに基づく教育実践コミュニケーション・情報・メディアの統合モデルに基づく教育実践
コミュニケーション・情報・メディアの統合モデルに基づく教育実践saireya _
 
知的財産
知的財産知的財産
知的財産saireya _
 

More from saireya _ (20)

文章作成の基礎
文章作成の基礎文章作成の基礎
文章作成の基礎
 
Peirceの探究段階論に基づく「情報I, II」の授業設計
Peirceの探究段階論に基づく「情報I, II」の授業設計Peirceの探究段階論に基づく「情報I, II」の授業設計
Peirceの探究段階論に基づく「情報I, II」の授業設計
 
Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析
Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析
Peirceの探究段階論に基づく「情報I, II」における単元間の構造分析
 
テーマ設定・文献読解
テーマ設定・文献読解テーマ設定・文献読解
テーマ設定・文献読解
 
実験レポートの書き方
実験レポートの書き方実験レポートの書き方
実験レポートの書き方
 
実験ノートの書き方
実験ノートの書き方実験ノートの書き方
実験ノートの書き方
 
コミュニケーション(2020ver)
コミュニケーション(2020ver)コミュニケーション(2020ver)
コミュニケーション(2020ver)
 
情報(2020ver)
情報(2020ver)情報(2020ver)
情報(2020ver)
 
表現と内容
表現と内容表現と内容
表現と内容
 
人間と機械
人間と機械人間と機械
人間と機械
 
創発(2020ver)
創発(2020ver)創発(2020ver)
創発(2020ver)
 
セキュリティ(2020ver)
セキュリティ(2020ver)セキュリティ(2020ver)
セキュリティ(2020ver)
 
介入としての側面に焦点化したプレゼンテーションの教育実践
介入としての側面に焦点化したプレゼンテーションの教育実践介入としての側面に焦点化したプレゼンテーションの教育実践
介入としての側面に焦点化したプレゼンテーションの教育実践
 
社会のイノベーションを志向する情報教育の体系化
社会のイノベーションを志向する情報教育の体系化社会のイノベーションを志向する情報教育の体系化
社会のイノベーションを志向する情報教育の体系化
 
社会システム理論に基づく情報教育の教材開発
社会システム理論に基づく情報教育の教材開発社会システム理論に基づく情報教育の教材開発
社会システム理論に基づく情報教育の教材開発
 
システム論に基づく情報教育の授業計画と教育実践
システム論に基づく情報教育の授業計画と教育実践システム論に基づく情報教育の授業計画と教育実践
システム論に基づく情報教育の授業計画と教育実践
 
プログラミング
プログラミングプログラミング
プログラミング
 
コミュニケーション・情報・メディアの統合モデルに基づく教育実践
コミュニケーション・情報・メディアの統合モデルに基づく教育実践コミュニケーション・情報・メディアの統合モデルに基づく教育実践
コミュニケーション・情報・メディアの統合モデルに基づく教育実践
 
知的財産
知的財産知的財産
知的財産
 
暗号
暗号暗号
暗号
 

Gensim

  • 3. Gensim Gensim トピックモデル (pLSA, LDA) や deep learning(word2vec) を簡単に使えるラ イブラリ [2][3] 公式サイトの tutorial は若干分かりにくいです 使い方は [4] や [1] に詳しい Figure: Mentioned by the author:) 3 / 11
  • 4. Gensim Gensim 公式サイトの tutorial は若干分かりにくいです 使い方は [4] や [1] に詳しい .......... .......... .......... .......... .......... .......... System and human system documents .......... .......... .......... .......... .......... .......... ['system', 'and' 'human'] texts 形態素解析 {'and': 19, 'minors': 37, ...} dic = corpora.Dictonary() .......... .......... .......... .......... .......... .......... [(10, 2), (19, 1), (3, 1), ...] corpus dic.doc2bow() 辞書とtf値を対応付け dic.save() dict.dic MmCorpus .serialize() corpus.mm tf・idf LSALSA LDA HDP RP log entropy word 2vec models model .save() lda.model dic.load() MmCorpus() model .load() similarities 文書の類似性判定 lda.model topic extraction model .show_topics() 文書のトピック抽出 Figure: Gensim を使った処理の一例 4 / 11
  • 5. Gensim Step0. documents 元の文書をリスト型で準備 1 # 元の文書 2 documents = [ 3 ”Human machine interface for lab abc computer applications”, 4 ”A survey of user opinion of computer system response time”, 5 ”The EPS user interface management system”, 6 ”System and human system engineering testing of EPS”, 7 ”Relation of user perceived response time to error measurement”, 8 ”The generation of random binary unordered trees”, 9 ”The intersection graph of paths in trees”, 10 ”Graph minors IV Widths of trees and well quasi ordering”, 11 ”Graph minors A survey”] 5 / 11
  • 6. Gensim Step1. 形態素解析 1 def parse(doc): 2 # 日本語なら形態素解析 3 # stopwordを除去する 4 stoplist = set(’for a of the and to in’.split()) 5 text = [word for word in doc.lower().split() if word not in stoplist] 6 return text 7 8 texts = [[w for w in parse(doc)] for doc in documents] 9 print texts 10 ’’’ [ 11 [’human’, ’machine’, ’interface’, ...], 12 [’a’, ’survey’, ’of’, ’user’, ...], 13 ...] ’’’ 6 / 11
  • 7. Gensim Step2. 辞書を作成 1 dic = corpora.Dictionary(texts) 2 # 巨大なデータに対しては時間がかかるので保存。 3 dic.save(’dict.dic’) 4 # dic.load(’dict.dic’) で読み込み。 5 6 print dic.token2id 7 # {’and’: 19, ’minors’: 37, ’generation’: 28, ...} 8 print dic[19] 9 # ’and’が出力される。 7 / 11
  • 8. Gensim Step3. コーパスを作成 1 # 作成した辞書を使って、文書を変換 2 new_doc = ”Human computer interaction” 3 new_vec = dic.doc2bow(parse(new_doc)) 4 print new_vec 5 # ”interaction”は辞書にないので無視される 6 # [(2, 1), (4, 1)] 7 8 # 同様にして、最初の文書集合に対してcorpus(文書−単語行列)を作成 9 # ここでは、単純なtf値からなる文書−単語行列を作成 10 corpus = [dic.doc2bow(text) for text in texts] 11 print corpus 12 # 巨大なデータに対しては時間がかかるので保存。 13 # Matrix Market形式で corpusを保存。他の形式でも良い。 14 corpora.MmCorpus.serialize(’corpus.mm’, corpus) 15 # 保存した corpusを読み込むとき 16 # corpus = corpora.MmCorpus(’corpus.mm’) 17 18 # 作成したコーパスで類似度を測る 19 index = similarities.docsim.SparseMatrixSimilarity(corpus, num_features=len(dic)) 20 # クエリを特徴ベクトルで表現 21 query = [(0,1),(4,1)] 22 # queryと類似するもの上位 10件を出力 23 print sorted(enumerate(index[query]), reverse=True, key=lambda x:x[1])[:10] 8 / 11
  • 9. Gensim Step4. モデルを適用 (tf・idf) 1 m = models.TfidfModel(corpus) 2 # tf・idf値からなる文書−単語行列を作成 3 # m[corpus[0]] で 0番目の文書の特徴ベクトルになる 4 corpus = m[corpus] 5 # m[corpus]は再びコーパスとして使用可能 Step5. トピックモデルを適用 1 # topic数は 200−500くらいが普通? 2 m = models.LdaModel(corpus, id2word = dic, num_topics = 3) 3 # 巨大なデータに対しては時間がかかるので保存。 4 m.save(’lda.model’) 5 # m[corpus[i]] に含まれる tupleは、文書iが topic jに属する確率 P(t_j | d_i) を表す 6 7 # 得られた topicとその成分を表示 8 for n in range(0, m.num_topics): 9 # formatted=Trueとすると、線型モデルで表示 10 print m.show_topics(formatted=False) 9 / 11
  • 10. Gensim 出力されたトピック topic1 = 0.097 ∗ system + 0.068 ∗ eps + 0.055 ∗ human + 0.054 ∗ interface + 0.040 ∗ trees + 0.040 ∗ user + 0.039 ∗ engineering + 0.039 ∗ management + 0.039 ∗ testing + 0.039 ∗ binary topic2 = 0.077 ∗ graph + 0.074 ∗ trees + 0.046 ∗ minors + 0.043 ∗ response + 0.043 ∗ ordering + 0.043 ∗ well + 0.043 ∗ iv + 0.043 ∗ quasi + 0.043 ∗ widths + 0.042 ∗ user topic3 = 0.081 ∗ computer + 0.060 ∗ user + 0.060 ∗ system + 0.060 ∗ survey + 0.059 ∗ time + 0.058 ∗ response + 0.058 ∗ opinion + 0.038 ∗ lab + 0.037 ∗ abc + 0.037 ∗ machine 10 / 11
  • 11. Reference I Python 用のトピックモデルのライブラリ gensim の使い方 (主に日本語のテキストの読み込み) - 唯物是真 @Scaled_Wurm. url: http://sucrose.hatenablog.com/entry/2013/10/29/001041. Radim Řehůřek. gensim: Topic modelling for humans. url: http://radimrehurek.com/gensim. Radim Řehůřek. “Software Framework for Topic Modelling with Large Corpora”. In: Proceedings of the LREC 2010 Workshop on New Challenges for NLP Frameworks. 2010, pp. 45–50. url: http://www.muni.cz/research/publications/884893. 高橋 侑久. LSI や LDA を手軽に試せる Gensim を使った自然言語処理入門 - SELECT * FROM life; url: http://yuku-tech.hatenablog.com/entry/20110623/1308810518. 11 / 11