NLP在线医生(一)
1.1 背景介紹
- 學(xué)習(xí)目標(biāo):
- 了解智能對話系統(tǒng)的相關(guān)背景知識.
- 掌握使用Unit對話API.
- 什么是智能對話系統(tǒng)?
- 隨著人工智能技術(shù)的發(fā)展, 聊天機(jī)器人, 語音助手等應(yīng)用在生活中隨處可見, 比如百度的小度, 阿里的小蜜, 微軟的小冰等等. 其目的在于通過人工智能技術(shù)讓機(jī)器像人類一樣能夠進(jìn)行智能回復(fù), 解決現(xiàn)實中的各種問題.
- 從處理問題的角度來區(qū)分, 智能對話系統(tǒng)可分為:
- 任務(wù)導(dǎo)向型: 完成具有明確指向性的任務(wù), 比如預(yù)定酒店咨詢, 在線問診等等.
- 非任務(wù)導(dǎo)向型: 沒有明確目的, 比如算算術(shù), 播放音樂, 回答問題.
- 我們的在線醫(yī)生項目就是任務(wù)導(dǎo)向型的智能對話系統(tǒng).
1.2 Unit對話API的使用
- 學(xué)習(xí)目標(biāo):
- 了解Unit平臺的相關(guān)知識.
- 掌握調(diào)用Unit API的實現(xiàn)過程.
- Unit平臺的相關(guān)知識:
- Unit平臺是百度大腦開放的智能對話定制與服務(wù)平臺, 也是當(dāng)前最大的中文領(lǐng)域?qū)υ掗_放平臺之一. Unit對注冊用戶提供免費的對話接口服務(wù), 比如中文閑聊API, 百科問答API, 詩句生成API等, 通過這些API我們可以感受一下智能對話的魅力, 同時它也可以作為任務(wù)導(dǎo)向型對話系統(tǒng)無法匹配用戶輸入時的最終選擇.
- Unit閑聊API演示:
- 調(diào)用Unit API的實現(xiàn)過程:
- 第一步: 注冊登錄百度賬戶, 進(jìn)入Unit控制臺創(chuàng)建自己的機(jī)器人.
- 第二步: 進(jìn)行相關(guān)配置, 獲得請求API接口需要的API Key與Secret Key.
- 第三步: 在服務(wù)器上編寫API調(diào)用腳本并進(jìn)行測試.
- 第一步: 注冊登錄百度賬戶, 進(jìn)入Unit控制臺創(chuàng)建自己的機(jī)器人.
ai.baidu.com
- 第二步: 進(jìn)行相關(guān)配置, 獲得請求API接口需要的API Key與Secret Key.
- 點擊獲取API Key進(jìn)入百度云應(yīng)用管理頁面.
- 點擊創(chuàng)建應(yīng)用, 進(jìn)入應(yīng)用信息表單填寫頁面.
- 填寫完畢后, 點擊立即創(chuàng)建, 成功后會提示創(chuàng)建完畢.
- 點擊返回應(yīng)用列表.
- 可以看到創(chuàng)建的API Key和Secret Key, 至此創(chuàng)建流程結(jié)束.
- 第三步: 在服務(wù)器上編寫API調(diào)用腳本并進(jìn)行測試
- 代碼位置: /data/doctor_online/main_serve/unit.py
- 調(diào)用:
- 輸出效果:
-
本章總結(jié):
- 學(xué)習(xí)了智能對話系統(tǒng)的相關(guān)背景知識:
- 什么是智能對話系統(tǒng)
- 從處理問題的目的來區(qū)分, 智能對話系統(tǒng)的分類
- 我們的在線醫(yī)生項目就是任務(wù)導(dǎo)向型的智能對話系統(tǒng).
- 學(xué)習(xí)了Unit平臺的相關(guān)知識:
- Unit平臺是百度大腦開放的智能對話定制與服務(wù)平臺, 也是當(dāng)前最大的中文領(lǐng)域?qū)υ掗_放平臺之一.
- 學(xué)習(xí)了調(diào)用Unit API的實現(xiàn)過程:
- 第一步: 注冊登錄百度賬戶, 進(jìn)入Unit控制臺創(chuàng)建自己的機(jī)器人.
- 第二步: 進(jìn)行相關(guān)配置, 獲得請求API接口需要的API Key與Secret Key.
- 第三步: 在服務(wù)器上編寫API調(diào)用腳本并進(jìn)行測試.
- 學(xué)習(xí)了智能對話系統(tǒng)的相關(guān)背景知識:
2.1 在線醫(yī)生的總體架構(gòu)
- 學(xué)習(xí)目標(biāo):
- 了解在線醫(yī)生項目的總體架構(gòu)
- 項目整體架構(gòu)圖:
- 架構(gòu)圖分析:
- 整個項目分為: 在線部分和離線部分
- 在線部分包括: werobot服務(wù)模塊, 主要邏輯服務(wù)模塊, 句子相關(guān)模型服務(wù)模塊, 會話管理模塊(redis), 圖數(shù)據(jù)庫模塊以及規(guī)則對話/Unit模塊.
- 離線部分包括: 結(jié)構(gòu)與非結(jié)構(gòu)化數(shù)據(jù)采集模塊, NER模型使用模塊, 以及實體審核模型使用模塊.
- 在線部分?jǐn)?shù)據(jù)流: 從用戶請求開始, 通過werobot服務(wù), 在werobot服務(wù)內(nèi)部請求主服務(wù), 在主服務(wù)中將調(diào)用會話管理數(shù)據(jù)庫redis, 調(diào)用句子相關(guān)模型服務(wù), 以及調(diào)用圖數(shù)據(jù)庫, 最后將查詢結(jié)果輸送給對話規(guī)則模版或者使用Unit對話API回復(fù).
- 離線部分?jǐn)?shù)據(jù)流: 從數(shù)據(jù)采集開始, 將獲得結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù), 對于結(jié)構(gòu)化數(shù)據(jù)將直接使用實體審核模型進(jìn)行審核, 然后寫入圖數(shù)據(jù)庫; 對于非結(jié)構(gòu)化數(shù)據(jù), 將使用NER模型進(jìn)行實體抽取, 然后通過實體審核后再寫入圖數(shù)據(jù)庫.
2.2 總體架構(gòu)中的工具介紹
- 學(xué)習(xí)目標(biāo):
- 了解總體架構(gòu)中使用了哪些工具.
- 掌握總體架構(gòu)中各個工具的簡介, 作用, 安裝和基本使用方法.
- 總體架構(gòu)中使用的工具:
- Flask web服務(wù)框架
- Redis數(shù)據(jù)庫
- Gunicorn服務(wù)組件
- Supervisor服務(wù)監(jiān)控器
- Neo4j圖數(shù)據(jù)庫
- Flask web服務(wù)框架:
- 簡介:
* Flask框架是當(dāng)下最受歡迎的python輕量級框架, 也是pytorch官網(wǎng)指定的部署框架. Flask的基本模式為在程序里將一個視圖函數(shù)分配給一個URL,每當(dāng)用戶訪問這個URL時,系統(tǒng)就會執(zhí)行給該URL分配好的視圖函數(shù),獲取函數(shù)的返回值,其工作過程見圖.
- 作用:
* 在項目中, Flask框架是主邏輯服務(wù)和句子相關(guān)模型服務(wù)使用的服務(wù)框架.
- 安裝:
- 基本使用方法:
- 代碼位置: /data/doctor_onine/main_serve/app.py
- 啟動服務(wù):
- 啟動效果:
* 通過瀏覽器打開地址http://127.0.0.1:5000/可看見打印了’Hello, World’.
- Redis數(shù)據(jù)庫:
window下使用redis
先在redis目錄下cmd: redis-server.exe redis.windows.conf 啟動redis服務(wù)
再在redis目錄下另開cmd,輸入redis-cli -h 127.0.0.1 -p 6379 -a 密碼
- 簡介:
* Redis(全稱:Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API.
- 作用:
* 在項目中, Redis用于會話管理數(shù)據(jù)庫, 保存用戶聊天歷史.
- 安裝:
- 基本使用方法:
* Redis支持四種數(shù)據(jù)結(jié)構(gòu)的存儲: String(字符串), Hash(散列), List(列表), Set(集合), Sorted Set(有序集合).
* 在這里我們將著重介紹如何在python中使用Hash(散列)進(jìn)行讀寫.
- 安裝python中的redis驅(qū)動:
- 啟動redis服務(wù):
- 在python中使用Hash(散列)進(jìn)行讀寫:
如果redis 設(shè)置了密碼
需要
REDIS_CONFIG = {
‘host’:‘127.0.0.1’,
‘port’:6379,
‘password’:‘123456’
}
否則報錯:Authentication required.
- 輸出效果:
- Gunicorn服務(wù)組件:
- 簡介:
* Gunicorn是一個被廣泛使用的高性能的Python WSGI UNIX HTTP服務(wù)組件(WSGI: Web Server Gateway Interface),移植自Ruby的獨角獸(Unicorn )項目,具有使用非常簡單,輕量級的資源消耗,以及高性能等特點.
- 作用:
* 在項目中, Gunicorn和Flask框架一同使用, 能夠開啟服務(wù), 處理請求,因其高性能的特點能夠有效減少服務(wù)丟包率.
- 安裝:
- 基本使用方法:
- Supervisor服務(wù)監(jiān)控:
- 簡介:
* Supervisor是用Python開發(fā)的一個client/server服務(wù),是Linux/Unix系統(tǒng)下的一個進(jìn)程管理工具。它可以很方便的監(jiān)聽、啟動、停止、重啟一個或多個進(jìn)程, 并守護(hù)這些進(jìn)程。
- 作用:
* 在項目中, Supervisor用于監(jiān)控和守護(hù)主要邏輯服務(wù)和redis數(shù)據(jù)庫服務(wù).
- 安裝:
- 基本使用方法:
- 還可以通過瀏覽器查看可視化監(jiān)控頁面: http://0.0.0.0:9001
- Neo4j圖數(shù)據(jù)庫:
- 因為在項目中, Neo4j圖數(shù)據(jù)庫作為核心的存儲和查詢數(shù)據(jù)庫, 后續(xù)課件中對其進(jìn)行詳細(xì)的介紹.
-
本章總結(jié):
- 學(xué)習(xí)了架構(gòu)圖分析:
- 整個項目分為: 在線部分和離線部分
- 在線部分包括: werobot服務(wù)模塊, 主要邏輯服務(wù)模塊, 句子相關(guān)模型服務(wù)模塊, 會話管理模塊(redis), 圖數(shù)據(jù)庫模塊以及規(guī)則對話/Unit模塊.
- 離線部分包括: 結(jié)構(gòu)與非結(jié)構(gòu)化數(shù)據(jù)采集模塊, NER模型使用模塊, 以及實體審核模型使用模塊.
- 學(xué)習(xí)了總體架構(gòu)中使用的工具:
- Flask web服務(wù)框架
- Redis數(shù)據(jù)庫
- Gunicorn服務(wù)組件
- Supervisor服務(wù)監(jiān)控器
- Neo4j圖數(shù)據(jù)庫
- Flask web服務(wù)框架:
- 作用: 在項目中, Flask框架是主邏輯服務(wù)和句子相關(guān)模型服務(wù)使用的服務(wù)框架.
- Redis數(shù)據(jù)庫:
- 作用: 在項目中, Redis用于會話管理數(shù)據(jù)庫, 保存用戶聊天歷史.
- Gunicorn服務(wù)組件:
- 作用: 在項目中, Gunicorn和Flask框架一同使用, 能夠開啟服務(wù), 處理請求,因其高性能的特點能夠有效減少服務(wù)丟包率.
- Supervisor服務(wù)監(jiān)控:
- 作用: 在項目中, Supervisor用于監(jiān)控和守護(hù)主要邏輯服務(wù)和redis數(shù)據(jù)庫服務(wù).
- 學(xué)習(xí)了架構(gòu)圖分析:
3.1 neo4j簡介
- 學(xué)習(xí)目標(biāo):
- 了解neo4j圖數(shù)據(jù)庫的簡介, 版本說明.
- 了解節(jié)點, 關(guān)系,屬性,標(biāo)簽的有關(guān)概念.
windows 下neo4j
警告: ERROR! Neo4j cannot be started using java version 1.7.0_75
解決: java JDK下載
并重新配置java JDK 環(huán)境變量后,可以正常啟動neo4j
瀏覽器登錄http://localhost:7474/browser/ 初始賬號密碼均為:neo4j
若出現(xiàn)問題:“ NotFoundError:無法在’Node’上執(zhí)行’removeChild’:要刪除的節(jié)點不是該節(jié)點的子節(jié)點。”并且應(yīng)用程序無法恢復(fù)。 更換chrome或者其他瀏覽器
- neo4j簡介:
- neo4j是由Java實現(xiàn)的開源NoSQL圖數(shù)據(jù)庫.自從2003年開始研發(fā), 到2007年發(fā)布第一版, 最新版本為3.3.5, neo4j現(xiàn)如今已經(jīng)被各行各業(yè)的數(shù)十萬家公司和組織采用.
- neo4j實現(xiàn)了專業(yè)數(shù)據(jù)庫級別的圖數(shù)據(jù)模型的存儲. 與普通的圖處理或內(nèi)存級數(shù)據(jù)庫不同, neo4j提供了完整的數(shù)據(jù)庫特性, 包括ACID事物的支持, 集群支持, 備份與故障轉(zhuǎn)移等. 這使其適合于企業(yè)級生產(chǎn)環(huán)境下的各種應(yīng)用.
- neo4j的版本說明:
- 企業(yè)版: 需要高額的付費獲得授權(quán), 提供高可用, 熱備份等性能.
- 社區(qū)開源版: 免費使用, 但只能單點運行.
- neo4j圖形數(shù)據(jù)庫的有關(guān)概念:
- 節(jié)點
* 節(jié)點是主要的數(shù)據(jù)元素, 節(jié)點通過關(guān)系連接到其他節(jié)點, 節(jié)點可以具有一個或多個屬性
(即存儲為鍵/值對的屬性), 節(jié)點有一個或多個標(biāo)簽, 用于描述其在圖表中的作用. 示例: Person>節(jié)點.
* 可以將節(jié)點類比為關(guān)系型數(shù)據(jù)庫中的表, 對應(yīng)的標(biāo)簽可以類比為不同的表名, 屬性就是表中的列.
- 關(guān)系
* 關(guān)系連接兩個節(jié)點, 關(guān)系是方向性的, 關(guān)系可以有一個或多個屬性(即存儲為鍵/值對的
屬性).
- 屬性
* 屬性是命名值, 其中名稱(或鍵)是字符串, 屬性可以被索引和約束, 可以從多個屬性創(chuàng)
建復(fù)合索引.
- 標(biāo)簽
* 標(biāo)簽用于組節(jié)點到集, 節(jié)點可以具有多個標(biāo)簽, 對標(biāo)簽進(jìn)行索引以加速在圖中查找節(jié)點.
3.2 neo4j圖數(shù)據(jù)庫的安裝
- 學(xué)習(xí)目標(biāo):
- 掌握neo4j圖數(shù)據(jù)庫的安裝流程及其可視化后臺的登陸…
- neo4j圖數(shù)據(jù)庫的安裝流程:
- 第一步: 將neo4j安裝信息載入到y(tǒng)um檢索列表.
- 第二步: 使用yum install命令安裝.
- 第三步: 修改配置文件內(nèi)容 /etc/neo4j/neo4j.conf.
- 第四步: 啟動neo4j數(shù)據(jù)庫.
- 第一步: 將neo4j安裝信息載入到y(tǒng)um檢索列表
- 第二步: 使用yum install命令安裝
- 第三步: 修改配置文件默認(rèn)在/etc/neo4j/neo4j.conf, 為了方便顯示下面把一些修改顯示在這里
- 第四步: 啟動neo4j數(shù)據(jù)庫
- neo4j的可視化管理后臺登陸:
- 訪問地址: http://0.0.0.0:7474.
- ConnectURL: bolt://0.0.0.0:7687
- Username: neo4j
- Password: neo4j (默認(rèn))
-
小節(jié)總結(jié):
- 學(xué)習(xí)了neo4j圖數(shù)據(jù)庫的安裝流程:
- 第一步: 將neo4j安裝信息載入到y(tǒng)um檢索列表.
- 第二步: 使用yum install命令安裝.
- 第三步: 修改配置文件內(nèi)容 /etc/neo4j/neo4j.conf.
- 第四步: 啟動neo4j數(shù)據(jù)庫.
- 學(xué)習(xí)了neo4j的可視化管理后臺登陸:
- 訪問地址: http://0.0.0.0:7474.
- ConnectURL: bolt://0.0.0.0:7687
- Username: neo4j
- Password: neo4j (默認(rèn))
- 學(xué)習(xí)了neo4j圖數(shù)據(jù)庫的安裝流程:
3.3 Cypher介紹與使用
- 學(xué)習(xí)目標(biāo)
- 了解Cypher的基本概念.
- 掌握Cypher的基本命令和語法.
- Cypher的基本概念:
- Cypher是neo4j圖數(shù)據(jù)的查詢語言, 類似于mysql數(shù)據(jù)庫的sql語句, 但是它允許對圖形進(jìn)行富有表現(xiàn)力和有效的查詢和更新.
- Cypher的基本命令和語法:
- create命令
- match命令
- merge命令
- relationship關(guān)系命令
- where命令
- delete命令
- sort命令
- 字符串函數(shù)
- 聚合函數(shù)
- index索引命令
- create命令: 創(chuàng)建圖數(shù)據(jù)中的節(jié)點.
- 演示:
- 效果
- match命令: 匹配(查詢)已有數(shù)據(jù).
- 演示:
- 效果:
- merge命令: 若節(jié)點存在, 則等效與match命令; 節(jié)點不存在, 則等效于create命令.
- 演示:
- 效果:
- 然后再次用merge查詢, 發(fā)現(xiàn)數(shù)據(jù)庫中的數(shù)據(jù)并沒有增加, 因為已經(jīng)存在相同的數(shù)據(jù)了, merge匹配成功.
- 演示:
- 效果:
- 使用create創(chuàng)建關(guān)系: 必須創(chuàng)建有方向性的關(guān)系, 否則報錯.
- 演示:
- 效果:
- 使用merge創(chuàng)建關(guān)系: 可以創(chuàng)建有/無方向性的關(guān)系.
- 演示:
- 效果:
- where命令: 類似于SQL中的添加查詢條件.
- 演示:
- 效果:
- delete命令: 刪除節(jié)點/關(guān)系及其關(guān)聯(lián)的屬性.
- 演示:
- 效果:
- sort命令: Cypher命令中的排序使用的是order by.
- 演示:
- 效果:
- 字符串函數(shù):
- toUpper()函數(shù)
- toLower()函數(shù)
- substring()函數(shù)
- replace()函數(shù)
- toUpper()函數(shù): 將一個輸入字符串轉(zhuǎn)換為大寫字母.
- 演示:
- 效果:
- toLower()函數(shù): 講一個輸入字符串轉(zhuǎn)換為小寫字母.
- 演示:
- 效果:
- substring()函數(shù): 返回一個子字符串.
- 演示:
- 效果:
- replace()函數(shù): 替換掉子字符串.
- 演示:
- 效果:
- 聚合函數(shù)
- count()函數(shù)
- max()函數(shù)
- min()函數(shù)
- sum()函數(shù)
- avg()函數(shù)
- count()函數(shù): 返回由match命令匹配成功的條數(shù).
- 演示:
- 效果:
- max()函數(shù): 返回由match命令匹配成功的記錄中的最大值.
- 演示:
- 效果:
- min()函數(shù): 返回由match命令匹配成功的記錄中的最小值.
- 演示:
- 效果:
- sum()函數(shù): 返回由match命令匹配成功的記錄中某字段的全部加和值.
- 演示:
- 效果:
- avg()函數(shù): 返回由match命令匹配成功的記錄中某字段的平均值.
- 演示:
- 效果:
- 索引index
- Neo4j支持在節(jié)點或關(guān)系屬性上的索引, 以提高查詢的性能.
- 可以為具有相同標(biāo)簽名稱的所有節(jié)點的屬性創(chuàng)建索引.
- 創(chuàng)建索引: 使用create index on來創(chuàng)建索引.
- 演示:
- 效果:
- 刪除索引: 使用drop index on來刪除索引.
- 演示:
- 效果:
-
小節(jié)總結(jié):
- 學(xué)習(xí)了Cypher的基本概念:
- Cypher是neo4j圖數(shù)據(jù)的查詢語言, 類似于mysql數(shù)據(jù)庫的sql語句, 但是它允許對圖形進(jìn)行富有表現(xiàn)力和有效的查詢和更新.
- Cypher的基本命令和語法:
- create命令
- match命令
- merge命令
- relationship關(guān)系命令
- where命令
- delete命令
- sort命令
- 字符串函數(shù)
- 聚合函數(shù)
- index索引命令
- create命令: 創(chuàng)建圖數(shù)據(jù)中的節(jié)點.
- CREATE (e:Employee{id:222, name:‘Bob’, salary:6000, deptnp:12})
- match命令: 匹配(查詢)已有數(shù)據(jù).
- MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno
- merge命令: 若節(jié)點存在, 則等效與match命令; 節(jié)點不存在, 則等效于create命令.
- MERGE (e:Employee {id:145, name:‘Lucy’, salary:7500, deptno:12})
- 使用create創(chuàng)建關(guān)系: 必須創(chuàng)建有方向性的關(guān)系, 否則報錯.
- CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)
- 使用merge創(chuàng)建關(guān)系: 可以創(chuàng)建有/無方向性的關(guān)系.
- MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)
- where命令: 類似于SQL中的添加查詢條件.
- MATCH (e:Employee) WHERE e.id=123 RETURN e
- delete命令: 刪除節(jié)點/關(guān)系及其關(guān)聯(lián)的屬性.
- MATCH (c1:CreditCard)-[r]-(c2:Customer) DELETE c1, r, c2
- sort命令: Cypher命令中的排序使用的是order by.
- MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.id
- 字符串函數(shù):
- toUpper()函數(shù)
- toLower()函數(shù)
- substring()函數(shù)
- replace()函數(shù)
- toUpper()函數(shù): 將一個輸入字符串轉(zhuǎn)換為大寫字母.
- MATCH (e:Employee) RETURN e.id, toUpper(e.name), e.salary, e.deptno
- toLower()函數(shù): 講一個輸入字符串轉(zhuǎn)換為小寫字母.
- MATCH (e:Employee) RETURN e.id, toLower(e.name), e.salary, e.deptno
- substring()函數(shù): 返回一個子字符串.
- MATCH (e:Employee) RETURN e.id, substring(e.name,0,2), e.salary, e.deptno
- replace()函數(shù): 替換掉子字符串.
- MATCH (e:Employee) RETURN e.id, replace(e.name,e.name,e.name + “_HelloWorld”), e.salary, e.deptno
- 聚合函數(shù)
- count()函數(shù)
- max()函數(shù)
- min()函數(shù)
- sum()函數(shù)
- avg()函數(shù)
- count()函數(shù): 返回由match命令匹配成功的條數(shù).
- MATCH (e:Employee) RETURN count( * )
- max()函數(shù): 返回由match命令匹配成功的記錄中的最大值.
- MATCH (e:Employee) RETURN max(e.salary)
- min()函數(shù): 返回由match命令匹配成功的記錄中的最小值.
- MATCH (e:Employee) RETURN min(e.salary)
- sum()函數(shù): 返回由match命令匹配成功的記錄中某字段的全部加和值.
- MATCH (e:Employee) RETURN sum(e.salary)
- avg()函數(shù): 返回由match命令匹配成功的記錄中某字段的平均值.
- MATCH (e:Employee) RETURN avg(e.salary)
- 索引index
- Neo4j支持在節(jié)點或關(guān)系屬性上的索引, 以提高查詢的性能.
- 可以為具有相同標(biāo)簽名稱的所有節(jié)點的屬性創(chuàng)建索引.
- 創(chuàng)建索引: 使用create index on來創(chuàng)建索引.
- CREATE INDEX ON:Employee(id)
- 刪除索引: 使用drop index on來刪除索引.
- DROP INDEX ON:Employee(id)
- 學(xué)習(xí)了Cypher的基本概念:
3.4 在Python中使用neo4j
- 學(xué)習(xí)目標(biāo)
- 了解python中neo4j-driver的相關(guān)知識.
- 掌握neo4j中事務(wù)概念和操作方法.
- neo4j-driver簡介:
- neo4j-driver是一個python中的package, 作為python中neo4j的驅(qū)動, 幫助我們在python程序中更好的使用圖數(shù)據(jù)庫.
- neo4j-driver的安裝:
- neo4j-driver使用演示:
config.py
# 設(shè)置neo4j圖數(shù)據(jù)庫的配置信息 NEO4J_CONFIG = {"uri": "bolt://127.0.0.1:7687","auth": ("username", "password"),"encrypted": False } from neo4j import GraphDatabase# 關(guān)于neo4j數(shù)據(jù)庫的用戶名,密碼信息已經(jīng)配置在同目錄下的config.py文件中 from config import NEO4J_CONFIGdriver = GraphDatabase.driver( **NEO4J_CONFIG)# 直接用python代碼形式訪問節(jié)點Company, 并返回所有節(jié)點信息 with driver.session() as session:cypher = "CREATE(c:Company) SET c.name='在線醫(yī)生' RETURN c.name"record = session.run(cypher)result = list(map(lambda x: x[0], record))print("result:", result)- 輸出效果:
- 事務(wù)的概念:
- 如果一組數(shù)據(jù)庫操作要么全部發(fā)生要么一步也不執(zhí)行,我們稱該組處理步驟為一個事務(wù), 它是數(shù)據(jù)庫一致性的保證.
- 使用事務(wù)的演示:
- 輸出效果:
查詢多個節(jié)點多個屬性
match(c:Cat) - [r] - (m:Mouse) return c.name, m.name
-
小節(jié)總結(jié):
- 學(xué)習(xí)了neo4j-driver簡介:
- neo4j-driver是一個python中的package, 作為python中neo4j的驅(qū)動, 幫助我們在python程序中更好的使用圖數(shù)據(jù)庫.
- 學(xué)習(xí)了neo4j-driver的安裝和使用方法.
- 學(xué)習(xí)了事務(wù)的概念:
- 如果一組數(shù)據(jù)庫操作要么全部發(fā)生要么一步也不執(zhí)行,我們稱該組處理步驟為一個事務(wù), 它是數(shù)據(jù)庫一致性的保證.
- 學(xué)習(xí)了如何使用事務(wù)來向圖數(shù)據(jù)庫中寫入數(shù)據(jù).
- 學(xué)習(xí)了neo4j-driver簡介:
4.1 離線部分簡要分析
- 學(xué)習(xí)目標(biāo):
- 了解離線部分的數(shù)據(jù)流水線以及組成部分.
- 了解各個組成部分的作用.
- 離線部分架構(gòu)圖:
- 離線部分架構(gòu)展開圖:
- 離線部分簡要分析:
- 根據(jù)架構(gòu)展開圖圖,離線部分可分為兩條數(shù)據(jù)流水線,分別用于處理結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù). 這里稱它們?yōu)榻Y(jié)構(gòu)化數(shù)據(jù)流水線和非結(jié)構(gòu)化數(shù)據(jù)流水線.
- 結(jié)構(gòu)化數(shù)據(jù)流水線的組成部分:
- 結(jié)構(gòu)化數(shù)據(jù)爬蟲: 從網(wǎng)頁上抓取結(jié)構(gòu)化的有關(guān)醫(yī)學(xué)命名實體的內(nèi)容.
- 結(jié)構(gòu)化數(shù)據(jù)的清洗: 對抓取的內(nèi)容進(jìn)行過濾和清洗, 以保留需要的部分.
- 命名實體審核: 對當(dāng)前命名實體進(jìn)行審核, 來保證這些實體符合我們的要求.
- 命名實體寫入數(shù)據(jù)庫: 將審核后的命名實體寫入數(shù)據(jù)庫之中, 供在線部分使用.
- 非結(jié)構(gòu)化數(shù)據(jù)流水線的組成部分:
- 非結(jié)構(gòu)化數(shù)據(jù)爬蟲: 從網(wǎng)頁上抓取非結(jié)構(gòu)化的包含醫(yī)學(xué)命名實體的文本.
- 非結(jié)構(gòu)化數(shù)據(jù)清洗: 對非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行過濾和清洗, 以保留需要的部分.
- 命名實體識別: 使用模型從非結(jié)構(gòu)化文本中獲取命名實體.
- 命名實體審核: 對當(dāng)前命名實體進(jìn)行審核, 來保證這些實體符合我們的要求.
- 命名實體寫入數(shù)據(jù)庫: 將審核后的命名實體寫入數(shù)據(jù)庫之中, 供在線部分使用.
- 說明:
- 因為本項目是以AI為核心的項目, 因為結(jié)構(gòu)化與非結(jié)構(gòu)化的數(shù)據(jù)爬蟲和清洗部分的內(nèi)容這里不做介紹, 但同學(xué)們要知道我們的數(shù)據(jù)來源.
4.2 結(jié)構(gòu)化數(shù)據(jù)流水線
- 學(xué)習(xí)目標(biāo):
- 了解需要進(jìn)行命名實體審核的數(shù)據(jù)內(nèi)容.
- 掌握結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體審核的過程.
- 掌握結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體寫入的過程.
- 需要進(jìn)行命名實體審核的數(shù)據(jù)內(nèi)容:
- 每個csv文件的名字都是一種疾病名.
- 文件位置: /data/doctor_offline/structured/noreview/
- 以躁狂癥.csv為例, 有如下內(nèi)容:
- csv文件的內(nèi)容是該疾病對應(yīng)的癥狀, 每種癥狀占一行.
- 文件位置: /data/doctor_offline/structured/noreview/躁狂癥.csv
- 進(jìn)行命名實體審核:
- 進(jìn)行命名實體審核的工作我們這里使用AI模型實現(xiàn), 包括訓(xùn)練數(shù)據(jù)集, 模型訓(xùn)練和使用的整個過程, 因此這里內(nèi)容以獨立一章的形成呈現(xiàn)給大家, 具體參見[第五章: 命名實體審核任務(wù)].
- 刪除審核后的可能存在的空文件:
- 代碼位置: 在/data/doctor_offline/structured/reviewed/目錄下執(zhí)行.
- 命名實體寫入數(shù)據(jù)庫:
- 將命名實體寫入圖數(shù)據(jù)庫的原因:
* 寫入的數(shù)據(jù)供在線部分進(jìn)行查詢,根據(jù)用戶輸入癥狀來匹配對應(yīng)疾病.
- 將命名實體寫入圖數(shù)據(jù)庫代碼:
- 調(diào)用:
fileinput UnicodeDecodeError: gbk codec cant decode byte 0x80 in position 2: illegal multibyte sequence
解決:symptom = list(map(lambda x : x.strip(), fileinput.FileInput(os.path.join(path, disease_csv), openhook= fileinput.hook_encoded(‘utf-8’))))
symptom = list(map(lambda x: x.strip(), fileinput.FileInput(os.path.join(path, disease_csv))))
- 輸出效果:
* 通過可視化管理后臺查看寫入效果.
4.3 非結(jié)構(gòu)化數(shù)據(jù)流水線
- 學(xué)習(xí)目標(biāo):
- 了解需要進(jìn)行命名實體識別的數(shù)據(jù)內(nèi)容.
- 掌握非結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體識別的過程.
- 掌握非結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體審核的過程.
- 掌握非結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體寫入的過程.
- 需要進(jìn)行命名實體識別的數(shù)據(jù)內(nèi)容:
- 每個txt文件的名字都是一種疾病名.
- 文件位置: /data/doctor_offline/unstructured/norecognite/
- 以黑色丘疹性皮膚病.txt為例, 有如下內(nèi)容:
- txt中是對該疾病癥狀的文本描述.
- 文件位置: /data/doctor_offline/unstructured/norecognite/黑色丘疹性皮膚病.txt
- 進(jìn)行命名實體識別:
- 進(jìn)行命名實體識別的工作我們這里使用AI模型實現(xiàn), 包括模型訓(xùn)練和使用的整個過程, 因此內(nèi)容以獨立一章的形成呈現(xiàn)給大家, 具體內(nèi)容在[第六章: 命名實體識別任務(wù)]
- 進(jìn)行命名實體審核:
- 同4.2 結(jié)構(gòu)化數(shù)據(jù)流水線中的命名實體審核.
- 命名實體寫入數(shù)據(jù)庫:
- 同4.2 結(jié)構(gòu)化數(shù)據(jù)流水線中的命名實體寫入數(shù)據(jù)庫.
-
本章總結(jié):
- 學(xué)習(xí)了離線部分的數(shù)據(jù)流水線以及組成部分.
- 根據(jù)架構(gòu)展開圖圖,離線部分可分為兩條數(shù)據(jù)流水線,分別用于處理結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù). 這里稱它們?yōu)榻Y(jié)構(gòu)化數(shù)據(jù)流水線和非結(jié)構(gòu)化數(shù)據(jù)流水線.
- 結(jié)構(gòu)化數(shù)據(jù)流水線的組成部分:
- 結(jié)構(gòu)化數(shù)據(jù)爬蟲: 從網(wǎng)頁上抓取結(jié)構(gòu)化的有關(guān)醫(yī)學(xué)命名實體的內(nèi)容.
- 結(jié)構(gòu)化數(shù)據(jù)的清洗: 對抓取的內(nèi)容進(jìn)行過濾和清洗, 以保留需要的部分.
- 命名實體審核: 對當(dāng)前命名實體進(jìn)行審核, 來保證這些實體符合我們的要求.
- 命名實體寫入數(shù)據(jù)庫: 將審核后的命名實體寫入數(shù)據(jù)庫之中, 供在線部分使用.
- 非結(jié)構(gòu)化數(shù)據(jù)流水線的組成部分:
- 非結(jié)構(gòu)化數(shù)據(jù)爬蟲: 從網(wǎng)頁上抓取非結(jié)構(gòu)化的包含醫(yī)學(xué)命名實體的文本.
- 非結(jié)構(gòu)化數(shù)據(jù)清洗: 對非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行過濾和清洗, 以保留需要的部分.
- 命名實體識別: 使用模型從非結(jié)構(gòu)化文本中獲取命名實體.
- 命名實體審核: 對當(dāng)前命名實體進(jìn)行審核, 來保證這些實體符合我們的要求.
- 命名實體寫入數(shù)據(jù)庫: 將審核后的命名實體寫入數(shù)據(jù)庫之中, 供在線部分使用.
- 學(xué)習(xí)了需要進(jìn)行命名實體審核的數(shù)據(jù)內(nèi)容.
- 學(xué)習(xí)了結(jié)構(gòu)化/非結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體審核的過程.
- 學(xué)習(xí)了結(jié)構(gòu)化/非結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體寫入的過程.
- 學(xué)習(xí)了需要進(jìn)行命名實體識別的數(shù)據(jù)內(nèi)容.
- 非結(jié)構(gòu)化數(shù)據(jù)流水線中命名實體識別的過程.
- 學(xué)習(xí)了離線部分的數(shù)據(jù)流水線以及組成部分.
5.1 任務(wù)介紹與模型選用
- 學(xué)習(xí)目標(biāo):
- 了解命名實體審核任務(wù)的相關(guān)知識.
- 了解選用的模型及其原因.
- NE審核任務(wù):
- 一般在實體進(jìn)入數(shù)據(jù)庫存儲前, 中間都會有一道必不可少的工序, 就是對識別出來的實體進(jìn)行合法性的檢驗, 即命名實體(NE)審核任務(wù). 它的檢驗過程不使用上下文信息, 更關(guān)注于字符本身的組合方式來進(jìn)行判斷, 本質(zhì)上,它是一項短文本二分類問題.
- 選用的模型及其原因:
- 針對短文本任務(wù), 無須捕捉長距離的關(guān)系, 因此我們使用了傳統(tǒng)的RNN模型來解決, 性能和效果可以達(dá)到很好的均衡.
- 短文本任務(wù)往往適合使用字嵌入的方式, 但是如果你的訓(xùn)練集不是很大,涉及的字?jǐn)?shù)有限, 那么可以直接使用預(yù)訓(xùn)練模型的字向量進(jìn)行表示即可. 我們這里使用了bert-chinese預(yù)訓(xùn)練模型來獲得中文漢字的向量表示.
5.2 訓(xùn)練數(shù)據(jù)集
- 學(xué)習(xí)目標(biāo):
- 了解訓(xùn)練數(shù)據(jù)集的樣式及其相關(guān)解釋.
- 掌握將數(shù)據(jù)集加載到內(nèi)存中的過程.
- 訓(xùn)練數(shù)據(jù)集的樣式:
- 數(shù)據(jù)集的相關(guān)解釋:
- 這些訓(xùn)練集中的正樣本往往是基于人工審核的標(biāo)準(zhǔn)命名實體.
- 數(shù)據(jù)集中的第一列代表標(biāo)簽, 1為正標(biāo)簽, 代表后面的文字是命名實體. 0為負(fù)標(biāo)簽, 代表后面的文字不是命名實體.
- 數(shù)據(jù)集中的第二列中的命名實體來源于數(shù)據(jù)庫中的癥狀實體名字, 它是結(jié)構(gòu)化爬蟲抓取的數(shù)據(jù). 而非命名實體則是它的字符串反轉(zhuǎn).
- 正負(fù)樣本的比例是1:1.
- 將數(shù)據(jù)集加載到內(nèi)存:
- 代碼位置: /data/doctor_offline/review_model/train.py
- 輸出效果:
- 小節(jié)總結(jié):
- 學(xué)習(xí)了訓(xùn)練數(shù)據(jù)集的樣式及其相關(guān)解釋.
- 學(xué)習(xí)了將數(shù)據(jù)集加載到內(nèi)存中的過程.
5.3 BERT中文預(yù)訓(xùn)練模型
- 學(xué)習(xí)目標(biāo):
- 了解BERT中文預(yù)訓(xùn)練模型的有關(guān)知識和作用.
- 掌握使用BERT中文預(yù)訓(xùn)練模型對句子編碼的過程.
- BERT中文預(yù)訓(xùn)練模型:
- BERT模型整體架構(gòu)基于Transformer模型架構(gòu), BERT中文預(yù)訓(xùn)練模型的解碼器和編碼器具有12層, 輸出層中的線性層具有768個節(jié)點, 即輸出張量最后一維的維度是768. 它使用的多頭注意力機(jī)制結(jié)構(gòu)中, 頭的數(shù)量為12, 模型總參數(shù)量為110M. 同時, 它在中文簡體和繁體上進(jìn)行訓(xùn)練, 因此適合中文簡體和繁體任務(wù).
- BERT中文預(yù)訓(xùn)練模型作用:
- 在實際的文本任務(wù)處理中, 有些訓(xùn)練語料很難獲得, 他們的總體數(shù)量和包含的詞匯總數(shù)都非常少, 不適合用于訓(xùn)練帶有Embedding層的模型, 但這些數(shù)據(jù)中卻又蘊含這一些有價值的規(guī)律可以被模型挖掘, 在這種情況下,使用預(yù)訓(xùn)練模型對原始文本進(jìn)行編碼是非常不錯的選擇, 因為預(yù)訓(xùn)練模型來自大型語料, 能夠使得當(dāng)前文本具有意義, 雖然這些意義可能并不針對某個特定領(lǐng)域, 但是這種缺陷可以使用微調(diào)模型來進(jìn)行彌補(bǔ).
- 使用BERT中文預(yù)訓(xùn)練模型對句子編碼:
bert 預(yù)訓(xùn)練模型地址
- 代碼位置: /data/doctor_offline/review_model/bert_chinese_encode.py
- 輸入?yún)?shù):
- 調(diào)用:
- 輸出效果:
注意:torch.hub.load無法下載時,利用迅雷等通過鏈接中 的地址進(jìn)行下載model.bin config.json vocab.txt并更改名稱
from transformers import BertModel, BertTokenizer
-
小節(jié)總結(jié):
- 學(xué)習(xí)了BERT中文預(yù)訓(xùn)練模型的有關(guān)知識:
- BERT模型整體架構(gòu)基于Transformer模型架構(gòu), BERT中文預(yù)訓(xùn)練模型的解碼器和編碼器具有12層, 輸出層中的線性層具有768個節(jié)點, 即輸出張量最后一維的維度是768. 它使用的多頭注意力機(jī)制結(jié)構(gòu)中, 頭的數(shù)量為12, 模型總參數(shù)量為110M. 同時, 它在中文簡體和繁體上進(jìn)行訓(xùn)練, 因此適合中文簡體和繁體任務(wù).
- 學(xué)習(xí)了BERT中文預(yù)訓(xùn)練模型的作用:
- 在實際的文本任務(wù)處理中, 有些訓(xùn)練語料很難獲得, 他們的總體數(shù)量和包含的詞匯總數(shù)都非常少, 不適合用于訓(xùn)練帶有Embedding層的模型, 但這些數(shù)據(jù)中卻又蘊含這一些有價值的規(guī)律可以被模型挖掘, 在這種情況下, 使用預(yù)訓(xùn)練模型對原始文本進(jìn)行編碼是非常不錯的選擇, 因為預(yù)訓(xùn)練模型來自大型語料, 能夠使得當(dāng)前文本具有意義, 雖然這些意義可能并不針對某個特定領(lǐng)域, 但是這種缺陷可以使用微調(diào)模型來進(jìn)行彌補(bǔ).
- 學(xué)習(xí)了使用BERT中文預(yù)訓(xùn)練模型對句子編碼的函數(shù): get_bert_encode_for_single(text)
- 學(xué)習(xí)了BERT中文預(yù)訓(xùn)練模型的有關(guān)知識:
5.4 構(gòu)建RNN模型
- 學(xué)習(xí)目標(biāo):
- 學(xué)習(xí)RNN模型的內(nèi)部結(jié)構(gòu)及計算公式.
- 掌握RNN模型的實現(xiàn)過程.
- 傳統(tǒng)RNN的內(nèi)部結(jié)構(gòu)圖:
- 結(jié)構(gòu)解釋圖:
- 內(nèi)部結(jié)構(gòu)分析:
* 我們把目光集中在中間的方塊部分, 它的輸入有兩部分, 分別是h(t-1)以及x(t), 代表上一時間步的隱層輸出, 以及此時間步的輸入, 它們進(jìn)入RNN結(jié)構(gòu)體后, 會"融合"到一起, 這種融合我們根據(jù)結(jié)構(gòu)解釋可知, 是將二者進(jìn)行拼接, 形成新的張量[x(t), h(t-1)], 之后這個新的張量將通過一個全連接層(線性層), 該層>使用tanh作為激活函數(shù), 最終得到該時間步的輸出h(t), 它將作為下一個時間步的>輸入和x(t+1)一起進(jìn)入結(jié)構(gòu)體. 以此類推.
- 內(nèi)部結(jié)構(gòu)過程演示:
- 根據(jù)結(jié)構(gòu)分析得出內(nèi)部計算公式:
- 激活函數(shù)tanh的作用:
* 用于幫助調(diào)節(jié)流經(jīng)網(wǎng)絡(luò)的值, tanh函數(shù)將值壓縮在-1和1之間.
- 構(gòu)建RNN模型的代碼分析:
- torch.cat演示:
- 代碼位置: /data/doctor_offline/review_model/RNN_MODEL.py
- 實例化參數(shù):
- 輸入?yún)?shù):
- 調(diào)用:
- 輸出效果:
- 小節(jié)總結(jié):
- 學(xué)習(xí)了RNN模型的內(nèi)部結(jié)構(gòu)及計算公式.
- 學(xué)習(xí)并實現(xiàn)了RNN模型的類: class RNN(nn.Module).
5.5 進(jìn)行模型訓(xùn)練
- 學(xué)習(xí)目標(biāo):
- 了解進(jìn)行模型訓(xùn)練的步驟.
- 掌握模型訓(xùn)練中每個步驟的實現(xiàn)過程.
- 進(jìn)行模型訓(xùn)練的步驟:
- 第一步: 構(gòu)建隨機(jī)選取數(shù)據(jù)函數(shù).
- 第二步: 構(gòu)建模型訓(xùn)練函數(shù).
- 第三步: 構(gòu)建模型驗證函數(shù).
- 第四步: 調(diào)用訓(xùn)練和驗證函數(shù).
- 第五步: 繪制訓(xùn)練和驗證的損失和準(zhǔn)確率對照曲線.
- 第六步: 模型保存.
- 第一步: 構(gòu)建隨機(jī)選取數(shù)據(jù)函數(shù)
- 代碼位置: /data/doctor_offline/review_model/train.py
- 輸入?yún)?shù):
- 調(diào)用:
- 輸出效果:
- 第二步: 構(gòu)建模型訓(xùn)練函數(shù)
- 代碼位置: /data/doctor_offline/review_model/train.py
- 第三步: 模型驗證函數(shù)
- 代碼位置: /data/doctor_offline/review_model/train.py
- 第四步: 調(diào)用訓(xùn)練和驗證函數(shù)
- 構(gòu)建時間計算函數(shù):
- 代碼位置: /data/doctor_offline/review_model/train.py
- 輸入?yún)?shù):
- 調(diào)用:
- 輸出效果:
- 調(diào)用訓(xùn)練和驗證函數(shù)并打印日志
- 代碼位置: /data/doctor_offline/review_model/train.py
- 輸出效果:
- 第五步: 繪制訓(xùn)練和驗證的損失和準(zhǔn)確率對照曲線
plt.title(“your title name”, y=-0.1)設(shè)置y位置可以將title設(shè)置在圖像下方
import matplotlib.pyplot as pltplt.figure(0) plt.plot(all_train_losses, label="Train Loss") plt.plot(all_valid_losses, color="red", label="Valid Loss") plt.legend(loc='upper left')plt.savefig("./loss.png")plt.figure(1) plt.plot(all_train_acc, label="Train Acc") plt.plot(all_valid_acc, color="red", label="Valid Acc") plt.legend(loc='upper left')plt.savefig("./acc.png")- 代碼位置: /data/doctor_offline/review_model/train.py
- 訓(xùn)練和驗證損失對照曲線:
- 訓(xùn)練和驗證準(zhǔn)確率對照曲線:
- 分析:
* 損失對照曲線一直下降, 說明模型能夠從數(shù)據(jù)中獲取規(guī)律,正在收斂, 準(zhǔn)確率對照曲線中驗證準(zhǔn)確率一直上升,最終維持在0.98左右.
- 第六步: 模型保存
- 代碼位置: /data/doctor_offline/review_model/train.py
- 輸出效果:
* 在/data/doctor_offline/review_model/路徑下生成BERT_RNN.pth文件.
- 小節(jié)總結(jié):
- 學(xué)習(xí)了進(jìn)行模型訓(xùn)練的步驟:
- 第一步: 構(gòu)建隨機(jī)選取數(shù)據(jù)函數(shù).
- 第二步: 構(gòu)建模型訓(xùn)練函數(shù).
- 第三步: 構(gòu)建模型驗證函數(shù).
- 第四步: 調(diào)用訓(xùn)練和驗證函數(shù).
- 第五步: 繪制訓(xùn)練和驗證的損失和準(zhǔn)確率對照曲線.
- 第六步: 模型保存.
- 學(xué)習(xí)了進(jìn)行模型訓(xùn)練的步驟:
5.6 模型使用
- 學(xué)習(xí)目標(biāo):
- 掌握模型預(yù)測的實現(xiàn)過程.
- 掌握模型批量預(yù)測的實現(xiàn)過程.
- 模型預(yù)測的實現(xiàn)過程:
tensor.topk演示:
>>> tr = torch.randn(1, 2) >>> tr tensor([[-0.1808, -1.4170]]) >>> tr.topk(1, 1) torch.return_types.topk(values=tensor([[-0.1808]]), indices=tensor([[0]]))- 代碼位置: /data/doctor_offline/review_model/predict.py
- 輸入?yún)?shù):
- 調(diào)用:
- 輸出效果:
- 模型批量預(yù)測的實現(xiàn)過程:
- 代碼位置: /data/doctor_offline/review_model/predict.py
- 輸入?yún)?shù):
- 調(diào)用:
- 輸出效果:
- 在輸出路徑下生成與輸入路徑等數(shù)量的同名csv文件, 內(nèi)部的癥狀實體是被審核的可用實體.
- 小節(jié)總結(jié):
- 學(xué)習(xí)并實現(xiàn)了模型預(yù)測的函數(shù): predict(input_line).
- 學(xué)習(xí)并實現(xiàn)了模型批量預(yù)測的函數(shù): batch_predict(input_path, output_path)
總結(jié)
以上是生活随笔為你收集整理的NLP在线医生(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动互联网的发展现状和发展趋势
- 下一篇: NICO EXCHANGE NICO 交