Skip to content

【人工知能】【自然言語処理】自然言語処理による「形態素解析」人名・地名・組織名の抽出や、高度で高速な重要語抽出ロジック、「構文解析」や「意味解析」を駆使したさまざまな機械要約処理の実装、「オントロジー」や「再帰的ニューラルネットワーク」による、文脈のエッセンスの抽出手法を、シェルスクリプトで学ぶ

Notifications You must be signed in to change notification settings

AaronZhangL/NLP_NaturalLanguageProcessing_JP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#
#########################################################
# 自然言語処理解析システム
#########################################################
#
#  自然言語処理によるテキスト自動分類、機械要約とオントロジー
#                                                       一般社団法人  共同通信社
#                                                       情報技術局将来技術開発室
#                                                                   鈴木  維一郎
#
#   "Author"  suzuki.iichiro@kyodonews.jp  "perlMan" horiuchi.kotaro.ani
#   "bashMan" kanazawa.hayato  "awkMan"  sugai.takayuki "graphMan" akasaki.haruka
#
#  要旨: Webで必要な情報を見つけるという作業は悪夢である。Webで特定の情報を検索
#  していると、膨大な無関係の資料に途方に暮れ、肝心の検索している事項を見落とし
#  てしまう事がよくある。検索は不正確で、多くの場合、何千ものページへのポインタ
#  が返される。さらに求める情報を得るためには、検索された文書全体を読まなければ
#  ならない。本当に関連のあるWebページを見つける事ができたとしても、ページ内の検
#  索が難しかったり、情報が明確でなかったりする場合がある。
#
#  インターネットに情報が溢れる現在、Webから必要とする情報を効率よく探し出したり、
#  Web上に分散した情報を組み合わせ集約し、自動的に処理したりするための技術が求め
#  られている。こうしたセマンティックWebの世界では、人工知能分野で長く研究されて
#  きたオントロジーの研究を取り入れている。こうした技術により、Webは巨大な知識ベ
#  ースとなり、様々な問題に対して推論を行い、有益な結論を導く事ができるようになる。
#
#  こうした技術により、Webは機械が理解可能な情報となり、標準によってきちんと定義
#  され、人と情報の世界においてある種の均衡状態となる。そのためには情報の把握を
#  手助けしてくれる、情報に関する情報「メタデータ」が必要である。
#
#  文書内から「メタデータ」を効率良く抽出することで、機械が文書の構造および意味
#  的義を理解し、行間の感情表現を特定し、文書の文脈を理解し、要旨/要約を自動生
#  成する事が可能となる。
#
#  処理は以下の自然言語処理技術が必要とされる
#
#    1.形態素解析  文中の単語を分解し品詞を特定する。(mecab)
#    2.構文解析    文中の単語間の構文的関係を決定し文の構造を決定する。(Cabocha)    
#    3.意味解析    単一テキスト内の構造(文脈)を決定する
#    4.照応解析    代名詞、定名詞句、「こそあど」と言われる指示詞などが文脈中の
#                    別の単語と同じ対象を指示する言語対照テキストの構造の決定、
#                    照応の解析、省略の補完。
#
#  <ビジュアライゼーション>
#  過去、http://www.47news.jp 47ニュースhttp://www.47news.jp の開発当初2006年か
#  ら、47都道府県の地方新聞社の記事をくまなくクロールし、記事ごとに形態素解析、
#  重要語抽出、人名抽出、地名抽出、GEOコード付与、組織名抽出、地図上にプロットなど
#  を積極的に行ってきた。以下10分おきに解析を繰り返し、日本のトピックの今がわか
#  る「今日のオントロジー」。記事の重要語や人名・地名・組織名をクラスタリングし動
#  的にカテゴリを生成する試作。
#  http://www.47news.jp/blog/DIGRAPH.PNG
#
#  カテゴライズ
#   http://www.47news.jp/cgi-bin/ra/editor/images/1categorize.png
#  クラスタリング
#   http://www.47news.jp/cgi-bin/ra/editor/images/2classtering.png
#   http://www.47news.jp/cgi-bin/ra/editor/images/3ontrogies.png
#  オントロジーの構築
#   http://www.47news.jp/cgi-bin/ra/editor/images/5exopinion.png
#  単一記事とオントロジー、リアルタイムデータとの多面的可視化
#   http://www.47news.jp/cgi-bin/ra/editor/images/4topicmap.png
#
#  我々は、新聞を読むとき、まず記事の見出しを見てあたりをつけ、見出しに添えられた
#  要旨を読み、その記事を読むかどうかを判断していると思われる。これは、見出しが、
#  記事の内容を簡潔に示す「超要約」、要旨が記事本文の「要約」になっているからだと
#  言える。
#
#  このプロジェクトの目的は人工知能自然言語処理技術を駆使して、テキストの内容を
#  掌握し、機械分類、機械要約することである。
#
#  テキスト処理によってできること
#    テキスト中の重要語、人名、地名、組織名の特定
#    テキストからの自動要約文抽出の実現
#    テキストのドメイン、タスク、トピックといったカテゴリ、ジャンルを特定
#		 オントロジーの作成とテキストのオントロジーへのマッピング
#
#
#
#
#
#
# ##############################################################################   
#
#  ロジック
#
#		1. 投入されたテキストの内容を解析する[重要語解析]
#   --------------------------------------------------
#
#   <> 1-1. テキスト中の単語/文章の[重要度]を利用する                  lib/calcImp.sh
#
#      要約対象の文書中に現れる単語の頻度を計算し、その順に重要語を定義する方法。頻
#      度が多い語は、その文章の主題に大きく関係している語であるとする仮定の下に、
#      主に名詞の頻度を計算し、その語が多く含まれる文を重要文として抽出する方法がと
#      られている。重要文抽出法のデメリットとしてテキストが複数の話題を含む場合に問
#      題が生じる事が指摘されている。
#
#       a)連接情報を使わず名詞の頻度                          calc_imp_by_HASH_Freq ;
#         重要度計算において、複合語の重みを使わず、重要度を用語の出現頻度で計算する。
#         用語が他の用語の一部として現れた場合もカウントしない。
#         例えば、「大学 野球」の使用回数が2回だとして、他に「大学 野球 秋季 リーグ」
#         が1回 「大学 野球 リーグ」が2回使われていると、「大学 野球」は「大学 野球
#          秋季 リーグ」「大学 野球 リーグ」の一部を構成しているが、カウントしない。
#
#       b)連接情報を使わず複合名詞の頻度                      calc_imp_by_HASH_TF 
#         重要度計算において、複合語の重みを使わず、重要度を用語の出現頻度で計算する。
#         ただし、用語が他の用語の一部として現れた場合もカウントする。
#         例えば、「大学 野球」の使用回数が2回だとして、他に「大学 野球 秋季 リーグ」
#         が1回 「大学 野球 リーグ」が2回使われていると、「大学 野球」は「大学 野球 
#         秋季 リーグ」「大学 野球 リーグ」の一部を構成しているので、「大学 野球」の
#         2回の他「大学 野球 秋季 リーグ」1回、 「大学 野球 リーグ」2回を足し頻度5
#         とする。
#
#       c)連接情報+名詞の延べ数                               calc_imp_by_HASH TOTAL
#         重要度計算において、連接語の重みを連接した単語の延べ数で計算する。
#         例えば、統計データで「大学」という語が「野球」の前に2回、「駅伝」の前に3回
#         連接したとすると。連接語の重みは次のとおり計算される。
#         *「大学」:5回 (「大学野球」2回  +  「大学駅伝」3回) 
#
#       d)連接情報+名詞の異なり数                             calc_imp_by_HASH UNIQUE
#         重要度計算において、複合後の重みを、単語の種類数で計算する。
#         例えば、統計データで、「情報」という語が「科学」の前に2回、「技術」の前に3回
#         連接したとすると、複合語の重みは次のとおり計算される。
#         * 2回 (「科学」 + 「技術」の2種)
#
#       e)連接情報+複合語のパープレキシティ                   calc_imp_by_PP ;
#         重要度計算において、複合語の重みをパープレキシティで計算する。パープレキシティ
#         は情報理論で使われる指標で、本システムでは各単名詞に「情報理論的に見ていくつの
#         単名詞が連接可能か」を示している。これは、以下のようにして求まる単名詞のエント
#         ロピーを元に、2のべき乗することで求められる。連接する語のそれぞれの出現確率を
#         P1~Pnとおくと、エントロピーの計算は次のように示せる。なお対数の底は2である。
#         *(-1 * P1 * log(P1)) + (-1 * P2 * log(P2)) ....... + (-1 * Pn * log(Pn))
#         例えば、統計データで、「大学」という語が「野球」の前に2回、「駅伝」の前に3
#         回連接(あわせると計5回連接)したとすると。単名詞のエントロピーは次のとおりに
#         なる。出現確率は「大学野球」が 2/5, 「大学駅伝」が 3/5である。 
#         *(-2/5 * log(2/5)) + (-3/5 * log(3/5))
#         「大学」13回   (「大学野球」2^2回  +  「大学駅伝」3^2回)
#
#       f)機械学習                                             calc_imp_by_DB ;
#          重要度計算において、学習機能(単名詞ごとの連接統計DBの情報)を使うモードに
#          する。重要度計算において、単名詞の連接情報は、元となるデータが多いほど正確
#          な統計データが得られると推測される。この学習機能は、いままでに処理対象とし
#          たテキストから単名詞の連接情報を蓄積し、重要度計算で用いるものである。
#
#
#   <> 1-2. テキスト中の文あるいは単語間の関係性情報を利用する。       lib/summary.sh
#
#      出力結果:graph.svg, graph.html
#      テキスト中の単語がノード、その関係をリンク、またはテキスト中の文をノード、
#      文間の関係をリンクで表現したグラフでテキストを表現し、このグラフ中での活性値
#      の伝搬により、高い活性値を得た単語、句、文を重要と見なす重要文抽出手法
#
#      2-1. ノードのスコアを利用する
#       <>ノードによる重み付け        
#         a)単語毎の重要度:上記重要語の抽出アルゴリズムを用いて算出  
#         b)人名/地名/組織/日付の重要度:単語毎に1を加算する       
#         c)係り受けの数:オントロジー解析の結果より算出した単語毎に係り受けられた
#           数を算出しそれぞれに1を加える
#
#      2-2.テキスト中あるいは段落中での文の位置情報を利用する
#       <>エッジによる重み付け
#         d)係り受けの重要度:cabochaコマンドで出力されたものを用いる 
#
#      2-3.見出し、タイトルなどの情報を利用する
#         e)タイトル、見出しを元にした重要度:タイトル、見出しより単語毎
#            の重要度を加算する                                        
#
#      2-4.テキスト中の文間の関係を解析したテキスト構造を利用する。
#         f)文の位置情報による重要度:記事の前の方に出ている語の重要度を
#            上げ、文の重要度を計算する
#         g)意見評価表現を含むエッジのスコアを加算する
#         h)単語間のつながりと関係性情報の重要度:高い活性値を得た単語、
#            句、文を重要と見なし加算する
#
#
#
#		2. 何について書かれたテキストなのか[オントロジー]
#   --------------------------------------------------
#      2-1. 人間が持っている常識や当該分野の知識「オントロジー」を利用する
#           システムは内容を理解した上で、重要な部分を要約しているわけではない。内容の
#           理解そのものが、現在のコンピュータで難しい事が原因である。構文解析や意味解
#           析の手法が不足しているだけでなく、人間の持っている常識や当該分野の知識など
#           が不足しているのである。このような知識の不足に対して、オントロジーの研究が
#           進められている。これは概念辞書とも言われるもので、人間の持っている知識を構
#           造化してコンピュータで扱えるよう電子化したデータベースである。
#           人間の知識、知能を概念的に体系化したオントロジーを構築する。
#           構築したオントロジーは2715のカテゴリノードで構成され、各ノードにはノードが
#           持つ語彙がシソーラスとして大量に格納されている。
#
#     <とりやめ>
#      オントロジーとした利用データ:日本語語彙大系CD-ROM版とは
#      CD-ROM版は 「日本語語彙大系」全5巻(岩波書店) を1枚のCD-ROMに収録した大規模日本語辞書。
#      NTTの日英機械翻訳システムALT-J/Eで用いられているコンピュータ用辞書を再編集したもので、
#      30万語の日本語辞書と 14000件の文型パタンが収録されている。 
#      30万語の収録語は3000種の意味分類(図1, 図2)を用いて定義されており、最大規模の日本語シ
#      ソーラスとなっている。
#      14000件の文型パタンも、やはり3000種の意味分類を用いて 日本語の文型を定義している。
#
#       出力結果:ont.dot ont.svg ont.html 
#
#		   <>Newspack : 2002-2017 凡そ250万件
#									- 日付
#									- 見出し、サブ見出し、本文
#                 - ジャンル
#
#     <Word net>
#     日本語ワードネットに収録されたsynset数や単語数、語義数は次のとおりです。
#     57,238 概念 (synset数)
#     93,834 words 語
#     158058 語義 (synsetと単語のペア)
#     135,692 定義文
#     48,276 例文
#
#
#		2. オントロジーに共同通信社過去記事をマッピング
#   --------------------------------------------------
#      2-1. 構築したオントロジーの各ノードに、共同通信社の過去記事250万件マッピングする。
#      2-2. 各ノードに紐づけられた記事に付与されているカテゴリ名を参照し、各ノードが持つ
#           カテゴリ名を付与する。
#
#						オントロジー側: 語彙
#           過去記事      : 見出しと本文→語彙(重要語、人名、地名、組織名)
#   
#     オントロジーの各ノードが持つ語彙と過去記事から抽出された重要語の重なりを定量化する。 
#
#
#
#     二つのコンテキスト間(オントロジーと過去記事)の類似度判定ロジック
#					1. <重要語抽出>二つのコンテキストそれぞれを特徴づける構成単語を定量化して抽出する
#					2. <マージ重要語抽出>二つのコンテキストをマージし統合したテキストの特徴を定量化して抽出する
#         3. 1と2で抽出された数値から近似値を算出。
#
#
##########################################
# 実行に必要なライブラリなど
# libc/libglibのインストール
#
# #linux
# yum install libc.so.6 ;
# yum install libglib-2.0.so.0
#
# #mac 
# sudo port install glib2
#
########
# gtk2/pkgconfigのインストール
#
# sudo port install gtk2 ;
# sudo port install pkgconfig ;
#
#
########
# gcc/g++ installのインストール
#
# yum install gcc
# yum install gcc-c++
#
########
# mecab/mecab dic のインストール
#
# mecabのインストール
# wget http://code.google.com/p/mecab/downloads/detail?name=mecab-0.996.tar.gz
# tar -zxvf mecab-0.996.tar.gz
# cd mecab-0.996
# ./configure 
# make
# make check 
# make install 
# ln -s /usr/local/bin/mecab /usr/bin/mecab ;
#
# 形態素解析 mecab dicのインストール
# mecab-ipadicのインストール
# wget https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
# tar -zxvf mecab-ipadic-2.7.0-20070801.tar.gz
# cd mecab-ipadic-2.7.0-20070801
# ./configure 
# make 
# make check 
# make install 
#
########
# darts のインストール
#
# tar xzvf darts-0.3.tar.gz
# cd darts-0.3
# make clean 
# ./configure
# make clean ;
# make
# make check
# make install
# 
#
########
# TinySVMのインストール
#
# # sudo port install tinysvm
# #でもよい。
# tar xzvf TinySVM-0.09.tar.gz
# cd TinySVM-0.09
# make clean 
# ./configure
# make clean ;
# make
# make check
# make install
# 
# # mac
# # sudo port install tinysvm
#
########
# YumChaのインストール
#
# tar xzvf yamcha-0.33.tar.gz
# cd yamcha-0.33
# make clean 
# ./configure
# make
# make check
# make install
# cd ../ ;
# ln -s /usr/local/bin/yamcha /usr/bin/yamcha ;
#
# コンパイルエラー発生
# error: strlen was not declared in this scope
#
# 対応は以下の通り。
# $ vim src/common.h
# #include < string.h >  (追加)
#
# コンパイルエラー発生
# error: atoi is not a member of ‘std’
#
# 対応は以下の通り。
# $ vim libexec/mkdarts.cpp
# #include < cstdlib >
#
# つまるところ、gcc 4.2 以前と gcc 4.3 の違いに起因するようです。
# ggcc 4.2 以前では、string.h や stdlib.h のようなヘッダファイルは
# 明示的にインクルードしていなくても、そのヘッダファイルでプロトタイプ宣言されている関数を呼び出すことができました。
# gcc 4.3 では明示的なインクルードが必要です。
# とりあえず、 src/common.h に #include <string.h> を追加して make してみます
#
########
# CRF++のインストール
#
# tar xvf CRF++-0.58.tar.gz
# cd CRF++-0.58
# make clean 
# ./configure
# make
# make install
# ln -s /usr/local/bin/crf_learn /usr/bin/crf_learn ;
# ln -s /usr/local/bin/crf_test /usr/bin/crf_test ;
# ldconfig
#
########
# cabochaのインストール
#
# tar zxvf  cabocha-0.60.tar.gz
# cd cabocha-0.60
# 
# # デフォルトはEUC です。
# make clean 
# LIBS=-liconv ./configure --with-posset=IPA
# make
# make install
# ln -s /usr/local/bin/cabocha /usr/bin/cabocha
# ldconfig
#
# コンパイルエラー発生
# error: strlen was not declared in this scope
#
# 対応は以下の通り。
# $ vim src/common.h
# #include <string.h>  (追加)
#
# コンパイルエラー発生
# error: ‘::unlink’ has not been declared
#
# 対応は以下の通り。
# $ vim src/utils.cpp
# #include <unistd.h>  (追加)
#
# コンパイルエラー発生
# chunk_learner.cpp:6:10: fatal error: 'crfpp.h' file not found
# コマンドライン上で、xcode-select --installを実行
# xcodeのコマンドラインツールをインストールされます。
#
# 対応は以下の通り。
# /usr/local/include/crfpp.h  があることを確認する
# .bash_profileでC_INCLUDE_PATHを設定する
# vim /Users/root/.bash_profile
# export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH
# 下記で確認する
# echo $C_INCLUDE_PATH
#
########
# 評価表現抽出ツールのインストール
#
# #tar -zxvf extractopinion-1.2.tar.gz ;
# # ra カレントディレクトリで
# mv extractopinion-1.2 ../ ;
# cd ../extractopinion-1.2 ;
# cd svmtools
# make clean ;
# make ;
# cd ../pol ;
# make clean ;
# make ;
# ldconfig  ;
#
# #Apacheで動作させるために必要(whichにcrf_testが通っていなければ)
# ln -s /usr/local/bin/crf_test /usr/bin/crf_test ;
# ./extract.sh in8 ;
#
########
# JdepP
#
# $ cd gzArchive 
# $ tar -zxvf jdepp-latest.tar.gz
# $ cd jdepp-2015-02-08 
# $ ./configure --with-corpus=kyoto-partial --disable-autopos-train
# $ make 
# $ sudo make install 
# $ ln -s /usr/local/bin/jdepp /usr/bin/jdepp
# $ make model ;
# $ make install ;
#
######################################################
# GraphVis 
# sudo yum install graphviz

About

【人工知能】【自然言語処理】自然言語処理による「形態素解析」人名・地名・組織名の抽出や、高度で高速な重要語抽出ロジック、「構文解析」や「意味解析」を駆使したさまざまな機械要約処理の実装、「オントロジー」や「再帰的ニューラルネットワーク」による、文脈のエッセンスの抽出手法を、シェルスクリプトで学ぶ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published