學習筆記CB004:提問、檢索、回答、NLPIR
聊天機器人,提問、檢索、回答。
提問,查詢關鍵詞生成、答案類型確定、句法和語義分析。查詢關鍵詞生成,提問提取關鍵詞,中心詞關聯擴展詞。答案類型確定,確定提問類型。句法和語義分析,問題深層含義剖析。檢索,搜索,根據查詢關鍵詞信息檢索,返回句子或段落。答案抽取,分析和推理檢索句子或段落,抽取提問一致實體,根據概率最大對候選答案排序。
海量文本知識表示,網路文本資源獲取、機器學習方法、大規模語義計算和推理、知識表示體系、知識庫構建。問句解析,中文分詞、詞性標註、實體標註、概念類別標註、句法分析、語義分析、邏輯結構標註、指代消解、關聯關係標註、問句分類、答案類別確定。答案生成過濾,候選答案抽取、關係推演、吻哈程度判斷、雜訊過濾。
聊天機器人技術類型。基於檢索技術,信息檢索,簡單易實現,無法從句法關係和語義關係給出答案,無法推理問題。基於模式匹配技術,把問題往梳理好的模式匹配,推理簡單,模式涵蓋不全。基於自然語言理解技術,把淺層分析加句法分析、語義分析。基於統計翻譯模型技術,把問句疑問詞留出來,和候選答案資源匹配。
問句解析。哈工大LTP(語言技術平台)、博森科技、jieba分詞、中科院張華平博士NLPIR漢語分詞系統。
NLPIR,http://pynlpir.readthedocs.io/en/latest/。安裝 pip install pynlpir 。下載授權文件 https://github.com/NLPIR-team/NLPIR/blob/master/License/license%20for%20a%20month/NLPIR-ICTCLAS分詞系統授權/NLPIR.user,替換pynlpir/Data目錄的已過期文件。
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import pynlpir
pynlpir.open()
# s = 聊天機器人到底該怎麼做呢?
s = 海洋是如何形成的
# 分詞 分析功能全打開 不使用英文
segments = pynlpir.segment(s, pos_names=all, pos_english=False)
for segment in segments:
print(segment[0], t, segment[1])
# 關鍵詞提取
key_words = pynlpir.get_key_words(s, weighted=True)
for key_word in key_words:
print(key_word[0], t, key_word[1])
pynlpir.close()
segment 切詞,返回tuple(token, pos),token切詞,pos 語言屬性。調用segment方法,指定pos_names參數all 、child 、parent,默認parent 表示獲取詞性最頂級詞性。child 表示獲取詞性最具體信息。all 表示獲取詞性相關所有詞性信息,從頂級詞性到該詞性路徑。
詞性分類表。nlpir 源代碼 /pynlpir/pos_map.py,全部詞性分類及其子類別:
POS_MAP = {
n: (名詞, noun, {
nr: (人名, personal name, {
nr1: (漢語姓氏, Chinese surname),
nr2: (漢語名字, Chinese given name),
nrj: (日語人名, Japanese personal name),
nrf: (音譯人名, transcribed personal name)
}),
ns: (地名, toponym, {
nsf: (音譯地名, transcribed toponym),
}),
nt: (機構團體名, organization/group name),
nz: (其它專名, other proper noun),
nl: (名詞性慣用語, noun phrase),
ng: (名詞性語素, noun morpheme),
}),
t: (時間詞, time word, {
tg: (時間詞性語素, time morpheme),
}),
s: (處所詞, locative word),
f: (方位詞, noun of locality),
v: (動詞, verb, {
vd: (副動詞, auxiliary verb),
vn: (名動詞, noun-verb),
vshi: (動詞"是", verb 是),
vyou: (動詞"有", verb 有),
vf: (趨向動詞, directional verb),
vx: (行事動詞, performative verb),
vi: (不及物動詞, intransitive verb),
vl: (動詞性慣用語, verb phrase),
vg: (動詞性語素, verb morpheme),
}),
a: (形容詞, adjective, {
ad: (副形詞, auxiliary adjective),
an: (名形詞, noun-adjective),
ag: (形容詞性語素, adjective morpheme),
al: (形容詞性慣用語, adjective phrase),
}),
b: (區別詞, distinguishing word, {
bl: (區別詞性慣用語, distinguishing phrase),
}),
z: (狀態詞, status word),
r: (代詞, pronoun, {
rr: (人稱代詞, personal pronoun),
rz: (指示代詞, demonstrative pronoun, {
rzt: (時間指示代詞, temporal demonstrative pronoun),
rzs: (處所指示代詞, locative demonstrative pronoun),
rzv: (謂詞性指示代詞, predicate demonstrative pronoun),
}),
ry: (疑問代詞, interrogative pronoun, {
ryt: (時間疑問代詞, temporal interrogative pronoun),
rys: (處所疑問代詞, locative interrogative pronoun),
ryv: (謂詞性疑問代詞, predicate interrogative pronoun),
}),
rg: (代詞性語素, pronoun morpheme),
}),
m: (數詞, numeral, {
mq: (數量詞, numeral-plus-classifier compound),
}),
q: (量詞, classifier, {
qv: (動量詞, verbal classifier),
qt: (時量詞, temporal classifier),
}),
d: (副詞, adverb),
p: (介詞, preposition, {
pba: (介詞「把」, preposition 把),
pbei: (介詞「被」, preposition 被),
}),
c: (連詞, conjunction, {
cc: (並列連詞, coordinating conjunction),
}),
u: (助詞, particle, {
uzhe: (著, particle 著),
ule: (了/嘍, particle 了/嘍),
uguo: (過, particle 過),
ude1: (的/底, particle 的/底),
ude2: (地, particle 地),
ude3: (得, particle 得),
usuo: (所, particle 所),
udeng: (等/等等/云云, particle 等/等等/云云),
uyy: (一樣/一般/似的/般, particle 一樣/一般/似的/般),
udh: (的話, particle 的話),
uls: (來講/來說/而言/說來, particle 來講/來說/而言/說來),
uzhi: (之, particle 之),
ulian: (連, particle 連),
}),
e: (嘆詞, interjection),
y: (語氣詞, modal particle),
o: (擬聲詞, onomatopoeia),
h: (前綴, prefix),
k: (後綴, suffix),
x: (字元串, string, {
xe: (Email字元串, email address),
xs: (微博會話分隔符, hashtag),
xm: (表情符合, emoticon),
xu: (網址URL, URL),
xx: (非語素字, non-morpheme character),
}),
w: (標點符號, punctuation mark, {
wkz: (左括弧, left parenthesis/bracket),
wky: (右括弧, right parenthesis/bracket),
wyz: (左引號, left quotation mark),
wyy: (右引號, right quotation mark),
wj: (句號, period),
ww: (問號, question mark),
wt: (嘆號, exclamation mark),
wd: (逗號, comma),
wf: (分號, semicolon),
wn: (頓號, enumeration comma),
wm: (冒號, colon),
ws: (省略號, ellipsis),
wp: (破折號, dash),
wb: (百分號千分號, percent/per mille sign),
wh: (單位符號, unit of measure sign),
}),
}
參考資料:
《Python 自然語言處理》
自己動手做聊天機器人 九-聊天機器人應該怎麼做
自己動手做聊天機器人 十-半個小時搞定詞性標註與關鍵詞提取
歡迎推薦上海機器學習工作機會,我的微信:qingxingfengzi
推薦閱讀:
※tf.nn.nce_loss 來自一篇古老的文章
※Learning Explanatory Rules from Noisy Data 閱讀筆記4
※RNN基本模型匯總(deeplearning.ai)