學習筆記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)

TAG:聊天機器人 | 自然語言處理 | 機器學習 |