日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

知识图谱实践篇(五):KBQA Demo

發(fā)布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 知识图谱实践篇(五):KBQA Demo 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作為實踐篇的最后一篇,我們將介紹如何用Python完成一個簡易的問答程序。下圖是demo的展示效果:

查詢結(jié)果為空,回答“I don't know.”;不能理解問句,回答“I can't understand.”。本實現(xiàn)參考了王昊奮老師發(fā)布在OpenKG上的demo“基于REfO的KBQA實現(xiàn)及示例”,讀者也可以參考此示例,來完成本demo。下面談?wù)劚綿emo的流程。

一、基本流程

此demo是利用正則表達式來做語義解析。我們需要第三方庫來完成初步的自然語言處理(分詞、實體識別),然后利用支持詞級別正則匹配的庫來完成后續(xù)的語義匹配。

分詞和實體識別(人名和電影名)我們用jieba來完成。jieba是一個輕量級的中文分詞工具,有多種語言的實現(xiàn)版本。對于分詞,在實驗環(huán)境中,jieba還是勉強能用。在我們這個demo當中,有些經(jīng)常會被使用的詞語并不能被正確切分。比如:“喜劇電影”、“恐怖電影”、“科幻電影”、“喜劇演員”、“出生日期”等,在分詞的時候,jieba把它們當作一個詞來處理,我們需要手動調(diào)整詞語的頻率使得“喜劇電影”能被切分為“喜劇”和“電影”。至于實體識別,jieba對于人名的識別精度尚可接受,但是電影名稱的識別精度太低以至于完全不可用。因此,我們直接把數(shù)據(jù)庫中的人名和電影名導(dǎo)出,作為外部詞典;使用jieba的時候加載外部詞典,這樣就能解決實體識別的問題。

將自然語言轉(zhuǎn)為以詞為基礎(chǔ)的基本單位后,我們使用REfO(Regular Expressions for Objects)來完成語義匹配。具體實現(xiàn)請參考OpenKG的demo或者本demo的代碼。

匹配成功后,得到其對應(yīng)的我們預(yù)先編寫的SPARQL模板,再向Fuseki服務(wù)器發(fā)送查詢,最后將結(jié)果打印出來。

二、代碼文件說明

代碼已放到github中,本項目的目錄結(jié)構(gòu)如下:

kg_demo_movie/crawler/movie_crawler.py__init__.pytradition2simple/langconv.pytraditional2simple.pyzh_wiki.py__init__.pyKB_query/jena_sparql_endpoint.pyquery_main.pyquestion2sparql.pyquestion_temp.pyword_tagging.pyexternal_dict/csv2txt.pymovie_title.csvmovie_title.txtperson_name.csvperson_name.txt__init__.py

?

  • "crawler"文件夾包含的是我們從"The Movie DB"獲取數(shù)據(jù)的腳本。
  • "KB_query"文件夾包含的是完成整個問答demo流程所需要的腳本。
    • "external_dict"包含的是人名和電影名兩個外部詞典。csv文件是從mysql-workbench導(dǎo)出的,按照jieba外部詞典的格式,我們將csv轉(zhuǎn)為對應(yīng)的txt。
    • "word_tagging",定義Word類的結(jié)構(gòu)(即我們在REfO中使用的對象);定義"Tagger"類來初始化詞典,并實現(xiàn)自然語言到Word對象的方法。
    • "jena_sparql_endpoint",用于完成與Fuseki的交互。
    • "question2sparql",將自然語言轉(zhuǎn)為對應(yīng)的SPARQL查詢。
    • "question_temp",定義SPARQL模板和匹配規(guī)則。
    • "query_main",main函數(shù)。

在運行"query_main"之前,讀者需要啟動Fuseki服務(wù),具體方法請參考上一篇文章。

?

三、總結(jié)

我們通過使用正則表達式的方式來解析自然語言,并將解析的結(jié)果和我們預(yù)定義的模板進行匹配,最后實現(xiàn)一個簡易的KBQA。方法沒有大家想象的那么“高大上”,沒有統(tǒng)計方法、沒有機器學(xué)習(xí)也沒有深度學(xué)習(xí)。正則的好處是,易學(xué),從事相關(guān)行業(yè)的人基本都了解這個東西;其次,可控性強或者說可解釋性強,如果某個問題解析錯誤,我們只要找到對應(yīng)的匹配規(guī)則進行調(diào)試即可;最后,正則冷啟動比較容易,在沒有數(shù)據(jù)或者數(shù)據(jù)極少的情況下,我們可以利用正則規(guī)則馬上上線一個類似上述demo的初級的問答系統(tǒng)。在現(xiàn)實情況中,由于上述優(yōu)點,工業(yè)界也比較青睞用正則來做語義解析。正則方法的缺陷也是顯而易見的,它并不能理解語義信息,而是基于符號的匹配。換個角度說,用正則的方法,就需要規(guī)則的設(shè)計者能夠盡可能考慮到所有情況,然而這是不可能的。暫且不考慮同義詞、句子結(jié)構(gòu)等問題,光是羅列所有可能的問題就需要花費很大的功夫。盡管如此,在某些垂直領(lǐng)域,比如“音樂”,“電影”,由于問題集合的規(guī)模在一定程度上是可控的(我們基本能將用戶的問題劃定在某個范圍內(nèi)),正則表達式還是有很大的用武之地的。在冷啟動一段時間,獲得了一定用戶使用數(shù)據(jù)之后,我們可以考慮引入其他的方法來改善系統(tǒng)的性能,然后逐漸減少正則規(guī)則在整個系統(tǒng)中的比重。如果讀者想深入研究KBQA,可以參考專欄“揭開知識庫問答KB-QA的面紗”,該專欄的作者詳細介紹了做KBQA的方法和相關(guān)研究。

這個系列的實踐也告一段落了。希望通過實踐,讀者能夠進一步理解知識圖譜的相關(guān)概念。

https://zhuanlan.zhihu.com/p/33363861

總結(jié)

以上是生活随笔為你收集整理的知识图谱实践篇(五):KBQA Demo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。