大讲å ï¼ââhttps://edu.51cto.com/course/25919.htmlââ
0 å¼ç¯ä»ç»
é®çç³»ç»æ¯èªç¶è¯è¨å¤çé¢åä¸ä¸ªå¾ç»å ¸çé®é¢ï¼å®ç¨äºåç人们以èªç¶è¯è¨å½¢å¼æåºçé®é¢ï¼æç广æ³çåºç¨ã
ç»å ¸åºç¨åºæ¯å æ¬ï¼æºè½è¯é³äº¤äºãå¨çº¿å®¢æãç¥è¯è·åãæ æç±»è天çã
常è§çåç±»æï¼çæåãæ£ç´¢åé®çç³»ç»ï¼åè½®é®çãå¤è½®é®çç³»ç»ï¼é¢åå¼æ¾é¢åãç¹å®é¢åçé®çç³»ç»ã
æ¬ææ¶åç主è¦æ¯å¨æ£ç´¢åãé¢åç¹å®é¢åçé®çç³»ç»ââæºè½å®¢ææºå¨äººãä¼ ç»å®¢ææºå¨äººçæ建æµç¨
é常éè¦å°ç¸å ³é¢åçç¥è¯ï¼Domain Knowledgeï¼ï¼è½¬å为ä¸ç³»åçè§ååç¥è¯å¾è°±ãæ建è¿ç¨ä¸é度ä¾èµâ人工âæºè½ï¼æ¢ä¸ªåºæ¯ï¼æ¢ä¸ªç¨æ·é½éè¦å¤§éçéå¤å³å¨ã
深度å¦ä¹ -æºè½é®çæºå¨äºº
深度è¯è¨æ¨¡åä¼å°é®é¢åæ档转å为è¯ä¹åéï¼ä»èæ¾å°æåçå¹é çæ¡ãæ¬æåå©Googleå¼æºçBert模åç»åFaisså¼æºåéæç´¢å¼æï¼å¿«éæ建åºäºè¯ä¹ç解ç对è¯æºå¨äººã
æ¡ä¾å享ï¼FAQé®çæºå¨äºº
FAQæ¯Frequently Asked Questionsçç®ç§°ãåå®æ们æä¸ä¸ªå¸¸è§é®é¢åçæ¡çæ°æ®åºï¼ç°å¨ç¨æ·æåºäºä¸ä¸ªæ°é®é¢ï¼è½ä¸è½èªå¨ä»å¸¸è§é®é¢åºä¸æ½ååºæç¸å ³çé®é¢åçæ¡æ¥ä½çå¢ï¼å¨è¿ä¸ªé¡¹ç®ä¸ï¼æ们ä¼æ¢ç´¢å¦ä½æ建è¿æ ·é®çæºå¨äººã
项ç®æ ¸å¿ææ¯ç¹ï¼
- éè¿æ·±åº¦å¦ä¹ 模åå¤æé®é¢ä¸çæ¡çå¹é å¾å
- 使ç¨BERT模åç¹å¾æå并å¤æé®é¢ç¸ä¼¼åº¦
- 使ç¨æ£ç´¢å¼æFaissç´¢å¼æ建åæ£ç´¢
- æ建å¨çº¿FAQé®çç³»ç»
0-1 å¦ä»ä¹
ç»åFaissåbertæä¾ç模åå®ç°äºä¸ä¸ªä¸æé®çç³»ç»ãæ¨å¨æä¾ä¸ä¸ªç¨Faissç»ååç§AI模åå®ç°è¯ä¹ç¸ä¼¼åº¦å¹é ç解å³æ¹æ¡ãæåéè¿é¡¹ç®æ¡ä¾å®ç°ï¼ææ¬è¯ä¹ç¸ä¼¼åº¦ææ¬æ£ç´¢ç³»ç»åFAQé®çæºå¨äººã
0-2 å¨çº¿ç³»ç»DEMO
- ææ¬è¯ä¹ç¸ä¼¼åº¦å¹é æ£ç´¢
- ææ¬è¯ä¹FAQé®çæºå¨äºº
项ç®å®ç°ä»¥ä¸ç§å¹³å°åæ路建议系ç»ï¼æ¯ä¸ä¸ªéç¨ç解å³æ¹æ¡ãå¼åè åªéè¦æç §æ°æ®è§èå³å¯ï¼ä¸éè¦ä¿®æ¹ä»£ç å°±å¯ä»¥è¿è¡ç³»ç»äº
1 对è¯ç³»ç»æ´ä½ç®ä»
1-1 对è¯ç³»ç»æ¦å¿µ
对è¯ç³»ç»å¯ä»¥æ ¹æ®äººçè¾å ¥èªå¨éæ©æè çæåºç¸åºçåå¤ï¼æ¥è¾¾å°å¸®å©äººä»¬å¨ç¹å®é¢åæè å¼æ¾å解å³ä¸å®çé®é¢ãï¼æåï¼éè¿å»çæ°æ®æä¾FAQæºè½é®ç: aiwen2100ï¼
- ç¨éï¼ä»»å¡åãé®çåãé²èå对è¯ç³»ç»ï¼
- åºæ¯ï¼å°éåãå¼æ¾å对è¯ç³»ç»ï¼
- 使ç¨æ¹æ³ï¼æ£ç´¢å¼ãçæå¼å¯¹è¯ç³»ç»
1-1-1 ä¸å对è¯ä»»å¡å¯¹æ¯
- é®çå(æ¡ä¾ï¼æä¾åºäºææ¬è¯ä¹-bert å faiss çéç¨è§£å³æ¹æ¡)
ç¨æ·å¸æå¾å°æ个é®é¢ççæ¡ï¼æºå¨äººåå¤æ¥èªäºç¹å®ç¥è¯åºï¼ä»¥ç¹å®çåå¤åçç¨æ·
- ä»»å¡å
ç¨æ·å¸æå®æç¹å®ä»»å¡ï¼æºå¨äººéè¿è¯ä¹æ§è¡åå°å·²å¯¹æ¥è½åï¼å¸®ç¨æ·å®ææå®ä»»å¡
- é²èå
ç¨æ·æ²¡ææç¡®ç®çï¼æºå¨äººåå¤ä¹æ²¡ææ åçæ¡ï¼ä»¥è¶£å³æ§çåå¤åçç¨æ·
1-1-2 æ£ç´¢å¼å¯¹è¯ç³»ç»
åºäºæ£ç´¢ç模åä¸ä¼äº§çæ°çæåï¼åªè½ä»é¢å å®ä¹çâåçéâä¸æéåºä¸ä¸ªè¾ä¸ºåéçåçã
- 缺ç¹
æ£ç´¢å¼å¯¹è¯ç³»ç»ä¸ä¼äº§çæ°çåå¤ï¼å ¶è½å¤åå¤ç±»åä¸å 容é½ç±è¯æåºæå³å®ãä¸æ¦ç¨æ·çé®è¯è¶ è±äºè¯æåºçèå´ï¼é£ä¹å¯¹è¯ç³»ç»å°æ æ³åç¡®åçç¨æ·ã
- ä¼ç¹
ç¸å¯¹ä¸¥è°¨å¯é ï¼å¯æ§æ§å¼ºï¼ä¸ä¼åå¤ä»¤äººåæ¶æè¿æ³æ³è§çææ¬ã
ä¸è¬å¤çæµç¨ï¼
1.é®ç对æ°æ®éçæ¸ æ´
2.Embeddingï¼tfidfï¼word2ec,doc2vec,elmo,bert....)
3.模åè®ç»
4.计ç®ææ¬ç¸ä¼¼åº¦
5.å¨é®çåºä¸éåºä¸è¾å ¥é®é¢ç¸ä¼¼åº¦æé«çé®é¢
6.è¿åç¸ä¼¼åº¦æé«çé®é¢æ对åºççæ¡
1-1-3 çæå¼å¯¹è¯ç³»ç»
åºäºèªç¶è¯è¨ç解çæå¼å¯¹è¯çç¥ï¼å³éè¿æºå¨å¦ä¹ ç®æ³æ建深å±è¯ä¹æ¨¡åï¼ç»åå¥è¯åæ
çç»è®¡è§å¾æåç¹å¾ï¼è®©æ¨¡åä»å¤§éçå·²æ对è¯ä¸å¦ä¹ 对è¯è§åï¼å©ç¨è®ç»å¥½ç模åé¢æµç»æã
- 缺ç¹
è¯ä¼°é®é¢ï¼éè¦ä¾èµäººå·¥è¯å®ï¼çæå 容ï¼æ§å¶ä¸å¥½ä¼åå¤ä»¤äººåæ¶æè¿åæ³è§çææ¬ã
- ä¼ç¹
æºè½å¯¹è¯ï¼åå¤å 容丰å¯ã
1-1-4 ä»»å¡å对è¯ç³»ç»
ä»»å¡å对è¯çæç»ç®æ æ¯å®ææå®ä»»å¡ï¼æ¯å¦å°åº¦æºè½é³ç®±ï¼éè¦å¨æ¯ä¸è½®å¯¹è¯é½éååéçå³çï¼ä¿è¯èªå·±æ§è¡æ£ç¡®çæ令ï¼å³è¯å«åºç¨æ·çæ£ç¡®æå¾ï¼
å¤è½®å¯¹è¯æ¯ä¸ç§å¨äººæºå¯¹è¯ä¸åæ¥æç¡®ç¨æ·æå¾ä¹åï¼è·åå¿ è¦ä¿¡æ¯ä»¥æç»å¾å°æç¡®ç¨æ·æ令çæ¹å¼ã
è¿éä»ç»ä¸ç§å¯¹è¯ç®¡ççä¸ç§æ¹å¼ï¼Frame-Based Dialogue Controlï¼é¢å æå®äºä¸å¼ è¡¨æ ¼ (Frame)ï¼è天æºå¨äººçç®æ å°±æ¯æè¿å¼ è¡¨æ ¼å¡«æ»¡ã
éè¿ä¸ä¸ªå®é åºæ¯çæ¡ä¾æ¥è§£éä¸è¿°å®ç°å ·ä½æ§è¡è¿ç¨ï¼
æï¼ãå»åäº¬å¤§å ´æºåºå¤å°é±ã
æå¾ï¼è¡ç¨è±è´¹è®¡ç®
槽ä½ï¼ãèµ·å§å°ï¼å½åä½ç½®ï¼ç®çå°ï¼åäº¬å¤§å ´æºåºï¼ä½¿ç¨è´§å¸ï¼ï¼ï¼ï¼ãï¼
æºè½å®¢æï¼ãæ¨å¥½ï¼è¯·é®æ¯ä½¿ç¨äººæ°å¸åã
æï¼ãæ¯çã
æå¾ï¼è¡ç¨è±è´¹è®¡ç®
槽ä½ï¼ãèµ·å§å°ï¼å½åä½ç½®ï¼ç®çå°ï¼è§å±±æºåºï¼ä½¿ç¨è´§å¸ï¼äººæ°å¸ãï¼
æºè½å®¢æï¼ã200å ã
1-2 对è¯ç³»ç»å ³é®ææ¯
1-2-1 ç¸å ³å·¥å ·
1.ç¼ç¨è¯è¨ï¼python( 模å æè æå¡) ,C++,Javaï¼go å¨çº¿æå¡
2.æ°æ®å¤çåæºå¨å¦ä¹ ç¸å ³åºï¼pandasãscikit-learnãjieba
3.深度å¦ä¹ æ¡æ¶ï¼tensorflowãpytorch
4.å¼åå·¥å ·ï¼pycharmãvisual studio code
5.å ¶å®å·¥å ·ï¼ElasticSearchæç´¢å¼æãåéæ£ç´¢å¼æFaiss/Milvus
1-2-2 æ£ç´¢å¼ç¸å ³ææ¯ä»ç»
1ãåè¯ç®æ³
- ä¼ ç»ç®æ³ï¼HMMé马å°å¯å¤«æ¨¡åãCRFæ¡ä»¶éæºåº
- 深度å¦ä¹ ï¼LSTMãBi-LTSM
2ãææ¬åéå表示
OneHot ãN-Gram ãTFIDFçè¯è¢æ¨¡åãWord2VecãDoc2VecãGlove
Bertï¼æ¬æ¡ä¾ææ¬åéå表示éæ©bertï¼ ãXLNetçç¥ç»ç½ç»æ¨¡å
3ãææ¬ç¸ä¼¼åº¦è®¡ç®ï¼é¡¹ç®ä¸ï¼æ们éç¨ä½å¼¦ç¸ä¼¼åº¦ï¼è®¡ç®å¾åï¼
ä½å¼¦ç¸ä¼¼åº¦ã欧å¼è·ç¦»
4ãæ£ç´¢æ¹æ³
- ElasticSearchæç´¢å¼æ
- åéæ£ç´¢å¼æFaissï¼æ¬é¡¹ç®éç¨ï¼Facebook AI ç 究é¢å¼æºç¸ä¼¼æ§çæ£ç´¢å¼æï¼5000ä¸ msï¼
1-2-3 çæå¼ç¸å ³ææ¯ä»ç»
é²èç³»ç»
1ãSeq2Seq模å
2ãSeq2Seq + Attention模å
3ãTransformer
4ãBert模å
1-2-4 ä»»å¡åç¸å ³ææ¯ä»ç»
éè¦ï¼å¨æ们å®é å·¥ä½ä¸ï¼å¾å¤åºæ¯é½ä¼ç¨å°
1ãæå¾è¯å«
2ã填槽ã对è¯ç®¡ç
3ãå¤è½®å¯¹è¯
åç±»
NERè¯å«
å¤ä¼¦å¯¹è¯ï¼æ¨¡åï¼è§åããããï¼
1-3 æºè½å®¢æè°ç åæ
客ææºå¨äººæ帮å©å®¢æåçé®é¢æé«äººå·¥å®¢ææççæºå¨äººã客ææºå¨äººå¯ä»¥ç¨äºåç客æ·ç常è§ãéå¤æ§çé®é¢ï¼ä½ä¸æ¯æ¿ä»£ï¼èæ¯è¾ å©äººå·¥æå¡ï¼æ¹å客æå·¥ä½ç模å¼ï¼è¿ä¸æ¥æé«å®¢æå·¥ä½æçã
1-3-1 è°ç åæ
纯æºå¨äººå®å ¨æ¿ä»£å®¢æç并ä¸å¤ï¼äººæºç»å模å¼ä½¿ç¨å¹¿æ³ãåæä¸ä¸ä¸»è¦æ以ä¸å 个åå ï¼
1ãæºå¨äººååºé度快ï¼ä¸å¯åæ¶æ¥å¾ å¤ä½å®¢æ·ï¼èä¸å®¢æ·ä¸éè¦çå¾ ï¼
2ãæºå¨äººæ¿ä»£äººå·¥å¤çå¨è¯¢ä¸çéå¤é®é¢ï¼äººå·¥å®¢æä¸æé·å ¥ç¦èºæ 绪ï¼å®¢æ·ä½éªå¥½ï¼
3ãéå°å¤æé®é¢ï¼äººæºç»å模å¼å¯ä»¥æ ç¼åæ¢äººå·¥æ¥å¤çï¼é¡¾å®¢ä½éªä¸ä¼ä¸æã
1-3-2 æºè½å®¢æçä¼å¿
1ãæºå¨äººå¯ä»¥7 X 24 å°æ¶å¨çº¿æå¡ï¼è§£ç客æ·çé®é¢ã
2ã常é®çé®é¢ï¼éå¤çé®é¢é½å¯ä»¥äº¤ç»æºå¨äººæ¥èªå¨åå¤ï¼çå»å¾å¤éå¤çè¾å ¥åå¤å¶ç²è´´ã
3ãå¯ä»¥è¾ å©äººå·¥å®¢æï¼å¨äººå·¥æå¡çæ¶åï¼æ¨èåå¤å 容ï¼å¹¶å¦ä¹ 人工客æçåå¤å 容ã
1-3-3 å¦ä½è®¾è®¡æºè½å®¢æç³»ç»
1ãæ¶é´ç¹æ§è¦æ±ãç³»ç»æéç¸åºæ¶é´å°åºæ¯å¤å°
2ãçµæ´»æ§ãç³»ç»çå个模ååºè¯¥å¨å¯æ§çç¶æå ï¼æ¯ä¸ä¸ªæ¨¡åå¯ææï¼ä¿è¯çº¿ä¸è´¨éã
3ãå®å ¨æ§ãå å¤ç½é离ï¼æ³¨æç½ç»å®å ¨ï¼ç³»ç»å®å ¨ï¼ç¨æ·å®å ¨ï¼æ°æ®å®å ¨ã
4ãå¯æ©å±æ§ï¼ç³»ç»çå个模åæ¯ææ©å±ï¼æ¯æ跨平å°ï¼æ¯æå¤ç§è¯è¨ï¼ç®æ³æ¨¡åå¯ä»¥çµæ´»åæ¢ã
5ãå¯é æ§ï¼ç³»ç»åé群稳å®è¿è¡ï¼ä¸»è¦çé群å®ç°åæºçå¤ï¼å®ç°ç¾å¤ï¼å½å个èç¹åçæ éå¯ä»¥è¿ éåæ¢ã
6ãå¯ç¨æ§ï¼ç³»ç»çå项åè½å¯ç¨ï¼ç³»ç»ä¸çº¿å¿ 须符åä¸å®çæ£ç¡®ç
1-4 é¿éå°èä»ç»
1-4-1 æºè½å®¢æåå±é¶æ®µ
- ä¼ ç»çæå¡æ¨¡å¼
- ç»å ¸çæå¡æ¨¡å¼
- æºè½é®çæå¡æ¨¡å¼
1-4-2 人æºäº¤äºåºæ¬æµç¨
é¿éå·´å·´äº2015å¹´7ææ¨åºäºé¿éå°è产åï¼å¨é¢ä¸çä» ä» å å¹´ä¸ï¼é¿éå°èåå±ä¹è¿ é令人é¾ä»¥æ³è±¡ãé¿éå°èç»åºäºä¸ä¸ªå ¸åçæºè½å¯¹è¯ç³»ç»çæ¶æã
èªç¶è¯è¨å¤çï¼NLPï¼æ¯å¯¹è¯ç³»ç»çæ ¸å¿é¨å
- æºè½é®ç模åç¨æ¥å®æé®ç类任å¡(FAQé®çç³»åï¼å¯ä»¥åºäºè¯ä¹å¹é æ£ç´¢æ¥å®æ)
- æºè½è天ç¨æ¥å®æé²è类任å¡
- 对è¯ç³»ç»èªç¶è¯è¨ç解éç¨çæ¯frame semantics 表示çä¸ç§åå½¢ï¼å³éç¨é¢åï¼domainï¼ãæå¾ï¼intentï¼åå±æ§æ§½ï¼slotsï¼æ¥è¡¨ç¤ºè¯ä¹ç»æ
2 åºç¨åºæ¯ä»ç»
CSDN é®çç³»ç»ï¼ââhttps://ask.csdn.net/ââ
ç¾åº¦ç¥éï¼ââhttps://zhidao.baidu.com/ââ
360é®çï¼ââhttps://wenda.so.com/search/ââ
2-2 ææ¬æç´¢åºæ¯
2-3 论åç¸ä¼¼é®çç³»ç»
汽车ä¹å®¶æ¥æå ¨çæ大ç汽车社åºè®ºåã积累äºä¸°å¯çç¨æ·é®çæ°æ®ï¼è½å¤è§£å³ç¨æ·å¨ç车ã买车ãç¨è½¦çæ¹é¢éå°çåç§é®é¢ãé对ç¨æ·å¨å¹³å°ä¸æåºçåç§é®é¢ï¼ä»æµ·éçé«è´¨éé®çåºä¸å¹é è¯ä¹æç¸ä¼¼çé®é¢åçæ¡
ææ¬æ°æ®å ·æ表达å¤æ ·åãç¨è¯ä¸è§èï¼å¦ï¼è½¦å车系ç¨è¯åå¨å¤§é缩åãç®åãè¯åºé¢ åçç°è±¡ï¼ãæ§ä¹æ§å¼ºï¼å¦ï¼âå京âå¯è½æ汽车åçï¼ä¹å¯è½æåå¸ï¼çç¹ç¹ï¼è¿ç»ä¼ ç»åºäºå ³é®è¯å¹é çæç´¢æ¹æ³å¸¦æ¥äºå¾å¤§ææãå æ¤ï¼å¨ä¼ ç»å ³é®è¯å¹é çåºç¡ä¸ï¼è¿ä¸æ¥å¼å ¥è¯ä¹æç´¢ææ¯ï¼å°ç²¾åé®çåºçé®é¢æ å°ä¸ºå¤ç»´åéï¼è¿è¡è¯ä¹å¹é ï¼æåé®é¢å¹é åç¡®æ§ã
2-4 æºè½å¯¹è¯é²èç³»ç»
æ°æ®æ ¼å¼ï¼ query-answer 对å¦ä¸
ä¸è¦éªäºº 好çï¼å¬ä½ çå°±è¡äº
ä¸è¦éªäººä¸¥éçç´æ¥ç¦è¨ 好çï¼å¬ä½ çå°±è¡äº
ä¸è¦éªäººäºå§ 好çï¼å¬ä½ çå°±è¡äº
ä¸è¦éªäººå¦ 好çï¼å¬ä½ çå°±è¡äº
ä¸è¦éªäººå°å¿å°å·å 好çï¼å¬ä½ çå°±è¡äº
ä¸è®¤è¯ä½ ä¸è®°å¾ä½ ä½ å½æå»é¼å
ä¸è®¤è¯ä½ æ ä½ å½æå»é¼å
ä¸è®¤è¯ä½ èå¥äº ä½ å½æå»é¼å
3 é®çç³»ç»åå±ç°ç¶
FAQæ£ç´¢åé®çæµç¨æ¯æ ¹æ®ç¨æ·çæ°Queryå»FAQç¥è¯åºæ¾å°æåéççæ¡å¹¶åé¦ç»ç¨æ·ã
æ£ç´¢è¿ç¨å¦å¾æ示
å ¶ä¸ï¼Qiæ¯ç¥è¯åºéçæ åé®ï¼Aiæ¯æ åé®å¯¹åºççæ¡ã
å ·ä½å¤çæµç¨ä¸ºï¼
- åéé离线建好索å¼
- 线ä¸æ¶å°ç¨æ· query ï¼å¬åä¸æ¹åééä½ä¸ºç²æç»æä¼ å ¥ä¸ä¸æ¨¡åè¿è¡è¿ä¸æ¥ç²¾ç¡®æåºï¼
- å©ç¨matching模å计ç®ç¨æ·queryåFAQç¥è¯åºä¸é®é¢æçæ¡çå¹é ç¨åº¦ï¼
- å©ç¨ranking 模å对åééå rerank 并è¿å topk个åéçæ¡ã
- matching 模åè´è´£å¯¹ (query, reply) pair åç¹å¾å¹é ï¼å ¶è¾åºç matching score é常ä¼ä½ä¸º ranking 模åçä¸ç»´ç¹å¾ï¼
- ranking 模åè´è´£å ·ä½ç reranking å·¥ä½ï¼å ¶è¾å ¥æ¯åéåå¤å¯¹åºçç¹å¾åéï¼æ ¹æ®å®é éæ±æé ä¸åç±»åï¼å¦ï¼pointwise, pairwise, listwiseï¼çæ失å½æ°ï¼å ¶è¾åºç ranking score æ¯åéåå¤çæç»æåºä¾æ®ã
- æäºæ£ç´¢ç³»ç»å¯è½ä¸ä¼æç¡®åºå matching å ranking è¿ä¸¤ä¸ªè¿ç¨ã
3-1 æºè½é®ç常ç¨è§£å³æ¹æ¡
é对FAQæ£ç´¢å¼é®çç³»ç»ï¼ä¸è¬å¤çæµç¨
- é®ç对æ°æ®éçæ¸ æ´
- Embedding
- 模åè®ç»
- 计ç®ææ¬ç¸ä¼¼åº¦
- å¨é®çåºä¸éåºä¸è¾å ¥é®é¢ç¸ä¼¼åº¦æé«çé®é¢
- è¿åç¸ä¼¼åº¦æé«çé®é¢æ对åºççæ¡
æ建ä¸ä¸ªFAQé®çç³»ç»ä¸è¬å®ç°æ¹æ³
- åºäºESçæºè½é®é¢ç³»ç»
ï¼éè¿å ³é®è¯å¹é è·åçæ¡ï¼ç±»ä¼¼çµåãæ°é»æç´¢é¢åå ³é®è¯å¬åï¼
- åºäºTF-IDFæ¹å¼
ï¼è®¡ç®æ¯ä¸ªåè¯çtfidfæ°å¼ï¼åè¯åæ¢ç®å¥å表示ã TF-IDF æ¹å¼ä¹å¨ç¨å¨å ³é®è¯æåï¼
- åºäºDoc2Vec 模åï¼èèè¯å段ï¼ç¸æ¯äºword2vecæ¥è¯´æäºæ®µè½ä¿¡æ¯ï¼
- éè¿æ·±åº¦å¦ä¹ è¯è¨æ¨¡åbert æååéï¼ç¶å计ç®ç¸ä¼¼åº¦
æ¹æ¡å¯ä»¥æ©å±å°çä¸å¡éæ±ï¼æ¬æä»ç»çæ¯ä¸ç§ææ¬è¯ä¹å¹é éç¨è§£å³æ¹æ¡ï¼
- æºè½å®¢æé¢åè¯ä¹å¹é
ï¼å¯¹è¯ç³»ç»æ£ç´¢å¼æºè½é®çç³»ç»ï¼çæ¡å¨ç¥è¯åºä¸ä¸è¿åå¯ä¸çæ°æ®è®°å½ï¼
- 以å¾æç´¢ï¼resnet å¾çåéå表示ï¼
- æ°é»é¢åææ¬ç¸ä¼¼æ¨èï¼ç¸ä¼¼æ°é»æ¨èçï¼
- åºäºææ¬è¯ä¹å¹é æ£ç´¢ç³»ç»ï¼ææ¬ç¸ä¼¼æ§rank ï¼
é对è¿ç±»é®é¢ï¼éç¹ææ¬çéè¿æç§æ¹å¼è¿è¡åéå表示ï¼word2vecãdoc2vecãelmoãbertçï¼ï¼ç¶åæè¿ç§ç¹å¾åéè¿è¡ç´¢å¼ï¼faiss/Milus) ,æç»å®ç°å¨çº¿æå¡ç³»ç»çæ£ç´¢ï¼ç¶ååéè¿ä¸å®çè§åè¿è¡è¿æ»¤ï¼è·åæç»çæ°æ®å 容ã
3-2 ä¼ ç»ææ¬å¹é æ¹æ³åå¨é®é¢
ä¼ ç»çææ¬å¹é ææ¯æBoWãVSMãTF-IDFãBM25ãJaccordãSimHashçç®æ³ï¼ä¸»è¦è§£å³åé¢ç¸ä¼¼åº¦é®é¢ã
é¢ä¸´çå°é¾ï¼
ç± äºä¸æå«ä¹ç丰å¯æ§ï¼é常å¾é¾ç´æ¥æ ¹æ®å ³é®åå¹é æè åºäºæºå¨å¦ä¹ çæµ å±æ¨¡åæ¥ç¡®å®ä¸¤ä¸ªå¥åä¹é´çè¯ä¹ç¸ä¼¼åº¦ã
3-3 深度å¦ä¹ ææ¬å¹é
深度å¦ä¹ 模åææ¬åè¯ä¹è¡¨ç¤ºéæ¸åºç¨äºæ£ç´¢å¼é®çç³»ç»ã
ç¸æ¯ä¼ ç»ç模åä¼ç¹ï¼
- è½å¤èç人工æåç¹å¾ç大é人åç©å
- ä»å¤§éçæ ·æ¬ä¸èªå¨æååºè¯è¯ä¹é´çå ³ç³»ï¼å¹¶è½ç»åçè¯å¹é ä¸çç»æä¿¡æ¯åææ¬å¹é çå±æ¬¡åç¹æ§ï¼åæä¼ ç»æ¨¡åå¾é¾åæçéå«å¨å¤§éæ°æ®ä¸å«ä¹ä¸ææ¾çç¹å¾
æ¬æéç¨ç¸ä¼¼é®é¢å¹é æ¥å®ç°ä¸ä¸ªFAQé®çç³»ç»ã
é®é¢ï¼ä»ä¹æ¯ç¸ä¼¼é®é¢å¹é ï¼
çæ¡ï¼å³å¯¹æ¯ç¨æ·é®é¢ä¸ç°æFAQç¥è¯åºä¸é®é¢çç¸ä¼¼åº¦ï¼è¿åç¨æ·é®é¢å¯¹åºçæåç¡®ççæ¡
深度è¯ä¹å¹é 模åå¯ä»¥å为两大类ï¼åå«æ¯representation-based method å interaction-based methodï¼è¿éæ们é对Represention-based Methodè¿ç§æ¹æ³è¿è¡æ¢ç´¢ã
è¿ç±»ç®æ³é¦å å°å¾ å¹é ç两个对象éè¿æ·±åº¦å¦ä¹ 模åè¿è¡è¡¨ç¤ºï¼ä¹å计ç®è¿ä¸¤ä¸ªè¡¨ç¤ºä¹é´çç¸ä¼¼åº¦ä¾¿å¯è¾åºä¸¤ä¸ªå¯¹è±¡çå¹é 度ãé对å¹é 度å½æ°f(x,y)ç计ç®é常æ两ç§æ¹æ³: cosine å½æ° å å¤å±æç¥å¨ç½ç»ï¼MLPï¼
对æ¯ä¸¤ç§å¹é æ¹æ³çä¼ç¼ºç¹
- cosine å½æ°ï¼éè¿ç¸ä¼¼åº¦åº¦éå½æ°è¿è¡è®¡ç®ï¼å®é 使ç¨è¿ç¨ä¸æ常ç¨çå°±æ¯ cosine å½æ°ï¼è¿ç§æ¹å¼ç®åé«æï¼å¹¶ä¸å¾ååºé´å¯æ§æä¹æç¡®
- å¤å±æç¥å¨ç½ç»ï¼MLPï¼ï¼å°ä¸¤ä¸ªåéåæ¥ä¸ä¸ªå¤å±æç¥å¨ç½ç»ï¼MLPï¼ï¼éè¿æ°æ®å»è®ç»æååºä¸ä¸ªå¹é 度å¾åï¼æ´å çµæ´»æåè½åæ´å¼ºï¼ä½å¯¹è®ç»çè¦æ±ä¹æ´é«
4 é®çç³»ç»å ³é®ææ¯
Google ç BERT 模åå¨ NLP é¢åä¸å ·æ巨大çå½±ååãå®æ¯ä¸ä¸ªéç¨çè¯è¨è¡¨ç¤ºæ¨¡åï¼å¯ä»¥åºç¨äºè¯¸å¤é¢åãæ¬æç项ç®æ¯å° Faissä¸ BERT 模åç»åæ建ææ¬è¯ä¹å¹é æ£ç´¢ç³»ç»ï¼ä½¿ç¨ BERT 模åå°ææ¬æ°æ®è½¬æåéï¼ç»å Faissç¹å¾åéç¸ä¼¼åº¦æç´¢å¼æå¯ä»¥å¿«éæç´¢ç¸ä¼¼ææ¬ï¼æç»è·åæ³è¦çç»æ
4-1 Faiss
Faissæ¯Facebook AIå¢éå¼æºçé对èç±»åç¸ä¼¼æ§æç´¢åºï¼ä¸ºç¨ å¯åéæä¾é«æç¸ä¼¼åº¦æç´¢åèç±»ï¼æ¯æå亿级å«åéçæç´¢ï¼æ¯ç®åæ为æççè¿ä¼¼è¿é»æç´¢åºãå®å å«å¤ç§æ索任æ大å°åééï¼å¤æ³¨ï¼åéé大å°ç±RAMå åå³å®ï¼çç®æ³ï¼ä»¥åç¨äºç®æ³è¯ä¼°ååæ°è°æ´çæ¯æ代ç ãFaissç¨C++ç¼åï¼å¹¶æä¾ä¸Numpyå®ç¾è¡æ¥çPythonæ¥å£ãé¤æ¤ä»¥å¤ï¼å¯¹ä¸äºæ ¸å¿ç®æ³æä¾äºGPUå®ç°ãç¸å ³ä»ç»åèãââFaissï¼Facebook å¼æºçç¸ä¼¼æ§æ索类åºââã
4-2 BERT
BERT 模åæ¯ Google åå¸çä¸ä¸ªæ°çè¯è¨è¡¨è¾¾æ¨¡åï¼Language Representation Modelï¼ï¼å ¨ç§°æ¯ Bidirectional Encoder Representations from Transformersï¼å³ååç¼ç 表å¾æ¨¡åãBERT 模åçä¼å¿ä½ç°å¨ä¸¤æ¹é¢ã
- ä¸æ¹é¢ï¼å®ä½¿ç¨åºäºç¹å«è®¾è®¡ç注æåæºå¶ï¼Attention Mechanismï¼çç®åå ¨è¿æ¥ç½ç»å代äºå¤æç CNN å RNN ç½ç»ãä¸ä½å¤§å¤§åå°äºè®ç»æ¶é´ï¼åæ¶ææå°æåäºç½ç»æ§è½ã
- å¦ä¸æ¹é¢ï¼BERT 模åæ¯ç¬¬ä¸ä¸ªçæ£æè·ä¸ä¸æè¯ä¹ä¿¡æ¯çé¢è®ç»è¯è¨è¡¨ç¤ºæ¨¡åãè¿æ¯å 为 BERT 模å使ç¨äº Transformer ä½ä¸ºç®æ³ç主è¦æ¡æ¶ï¼è Transformer æ¡æ¶è½æ´å½»åºå°ææè¯å¥ä¸çååå ³ç³»ã
Google æä¾äºä¸äºé¢å è®ç»ç模åï¼å ¶ä¸æåºæ¬ç两个模åæ¯BERT-base 模åå BERT-large 模åãå ·ä½åæ°å¦ä¸è¡¨æ示ï¼
BERT-base 模åå BERT-large 模åçåæ°æ»é大å°åç½ç»å±æ°ä¸åï¼BERT-large 模åæå 计ç®æºå åè¾å¤ï¼æ以æ¬æ项ç®éç¨ BERT-base 模å对ææ¬æ°æ®è¿è¡åé转åãï¼æ³¨ï¼å ¶ä¸ï¼å±æ°ï¼å³ Transformer å个æ°ï¼è¡¨ç¤ºä¸º Lï¼éè尺寸表示为 H ï¼èªæ³¨æå头æ°è¡¨ç¤ºä¸º A ãï¼
5 é®çç³»ç»å®ç°
5-1 æ°æ®è§è
å ³äºmain.py 主è¦åæ°
$ python main.py --help
usage: main.py [-h] --task TASK [âload] [âindex] [ân_total N_TOTAL]
[âsearch] [âsentence SENTENCE] [âtopK TOPK]
optional arguments:
-h, --help show this help message and exit
âtask TASK project task name
âload load data into db
âindex load data text vector into faiss
ân_total N_TOTAL take data n_sample ,generate it into faiss
âsearch search matched text from faiss
âsentence SENTENCE query text data
âtopK TOPK take matched data in topK
第ä¸æ¥ï¼ç¥è¯åºåå¨ < id,answer>
$ python main.py --taskmedicalâload
第äºæ¥ï¼ç´¢å¼æ建<id,question>
$ python main.py --taskmedicalâindex --n_total 120000
第ä¸æ¥ï¼ææ¬è¯ä¹ç¸ä¼¼åº¦å¹é æ£ç´¢
$ python main.py --taskmedical_120000âsearch --sentence å¾äºxxæä¹æ²»ç
å¤æ³¨ï¼medical_120000ä¸task_${ç´¢å¼è®°å½æ°} ç»å
å®æä¸è¿°åè½åï¼æ们å¯ä»¥å¨æ¤åºç¡ä¸ï¼æ ¹æ®ä¸å¡ä¸åæ建ä¸äºç¸å ³åºç¨ï¼ä¾å¦ï¼
- å¯ä»¥å®ç°FAQæºè½é®ç
- å¯ä»¥å®ç°æ°é»èµè®¯å 容类ææ¬è¯ä¹å¹é å¬å
- å¯ä»¥å®ç°åºäºææ¬è¯ä¹çä¸ææ£ç´¢ç³»ç»
第åæ¥ï¼åºäºææ¬è¯ä¹æ£ç´¢æå¡å®ç°FAQé®ç
$ python main.py --taskmedical_120000âsearch --sentence 身ä¸åºç° --topK 10
第äºæ¥ï¼åºäºææ¬è¯ä¹æ£ç´¢æå¡Webæå¡
å¯å¨æå¡python app.py --taskmedical_120000ï¼ç¶å访é®å°åââhttp://xx.xx.xx.xx:5000/ââ
æ们è¿éå¢ï¼ä½¿ç¨ä¸è¿°åºç¡æå¡å®æä¸ä¸ªFAQé®çæºå¨äºº
项ç®æ°æ®éå å«ä¸ä¸ªé¨åï¼é®é¢æ°æ®é+çæ¡æ°æ®é+é®é¢-çæ¡å¯ä¸æ è¯ï¼æ°æ®æ¯ä¸ä¸å¯¹åºçã
é对ä¸åçä¸å¡ç³»ç»ï¼æ们åªéè¦æä¾è¿ç§æ°æ®æ ¼å¼ï¼éè¿æ¬æç模æ¿å°±å¯ä»¥å¿«éæ建ä¸ä¸ªdemoäºï¼ç¥å¤§å®¶å¦ä¹ æå¿«ã
5-2 ç³»ç»æ´ä½æ¶æ
æ¬æçææ¬è¯ä¹å¹é æ索项ç®ä½¿ç¨ç FaissåBERTçæ´ä½æ¶æå¦å¾æ示ï¼
ï¼æ³¨ï¼æ·±èè²çº¿ä¸ºæ°æ®å¯¼å ¥è¿ç¨ï¼æ©é»è²çº¿ä¸ºç¨æ·æ¥è¯¢è¿ç¨ãï¼
- é¦å ï¼æ¬æ项ç®ä½¿ç¨å¼æºç bert-serving ï¼ BERTåå¥åç¼ç å¨ï¼æ é¢æ°æ®è½¬å为åºå®é¿åº¦
- 为 768 ç»´çç¹å¾åéï¼å¹¶å¯¼å ¥ Milvus æè Faissåºã
- ç¶åï¼å¯¹åå ¥ Milvus/Faiss åºä¸çç¹å¾åéè¿è¡åå¨å¹¶å»ºç«ç´¢å¼ï¼åæ¶åå§æ°æ®æä¾å¯ä¸IDç¼ç ï¼å° ID å对åºå 容åå¨å¨ PostgreSQL ä¸ã
- æåï¼ç¨æ·è¾å ¥ä¸ä¸ªæ é¢ï¼BERT å°å ¶è½¬æç¹å¾åéãMilvus/Faiss 对ç¹å¾åéè¿è¡ç¸ä¼¼åº¦æ£ç´¢ï¼å¾å°ç¸ä¼¼çæ é¢ç ID ï¼å¨ ç¥è¯åºï¼PostgreSQL/MySQL/SQLiteãããï¼ ä¸æ¾åº ID 对åºç详ç»ä¿¡æ¯è¿å
6-3 ææ¬åéæå¡ bert-serving
使ç¨bert as service æå¡
第ä¸æ¥ï¼å®è£ tensorflow
Python >= 3.5
Tensorflow >= 1.10 (one-point-ten)
ubuntuç³»ç»-gpuä¸è½½ç¦»çº¿å®è£ æ件并pipå®è£
tensorboard-1.15.0-py3-none-any.whl
tensorflow_estimator-1.15.1-py2.py3-none-any.whl
tensorflow_gpu-1.15.3-cp37-cp37m-manylinux2010_x86_64.whl
ä¹å¯ä»¥éè¿ä¸é¢çæ¹å¼å¿«éä¸è½½ï¼è¿éä¸è½½cpuçæ¬ï¼
pip install tensorflow==1.15.0 --user -iââhttps://pypi.tuna.tsinghua.edu.cn/simpleââ
éªè¯æ¯å¦å®è£
import tensorflow as tf
print(tf.version)
第äºæ¥ï¼bert-serving æå¡æ建
ï¼ æ们å¨ubuntuç³»ç»æ建å®æbert-serving ï¼ç®å½ï¼/home/ubuntu/teacher/ ï¼
éè¿bert-servingæå¡ï¼å¸®å©æ们解å³ï¼ææ¬-> åéç转æ¢
1ãåègithub æä¾ç代ç
git cloneââhttps://github.com/hanxiao/bert-as-service.gitââ
2ãå®è£ serveråclient
pip install bert-serving-server # server
pip install bert-serving-client # client, independent of â
âbert-serving-serverâ
â
3ãä¸è½½pretrained BERT models
Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters
ââhttps://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zipââ
解å模åï¼
chinese_L-12_H-768_A-12
âââ bert_config.json
âââ bert_model.ckpt.data-00000-of-00001
âââ bert_model.ckpt.index
âââ bert_model.ckpt.meta
âââ vocab.txt
bert_config.json: bert 模åé ç½®åæ°
vocab.txt: åå ¸
bert_model: é¢è®ç»ç模å
4ãå¯å¨bert-service
nohup bert-serving-start -model_dir chinese_L-12_H-768_A-12 -num_worker 1 -max_seq_len 64 >start_bert_serving.log 2>&1 &
( CPUåGPU 模å¼é½å¯ä»¥ )
é对æ¯ä¸ªå段è¿è¡è¯´æ
workers = 4 表示åæ¶å¹¶åå¤ç请æ±æ°
model_dir é¢è®ç»ç模å
max_seq_len ä¸å¡åæå¥åçé¿åº¦
å ³éæå¡
bert-serving-terminate -port 5555
5ãæµè¯ææ¬-> åé表示ç»æ
from bert_serving.client import BertClient
bc = BertClient()
result = bc.encode(['First do it'])
print(result)
5-4 åéç¸ä¼¼åº¦æç´¢å¼æ
ââ产åå¦ä¹ æåââ
5-5 ç¥è¯åºåå¨
ç¥è¯åºï¼å¯ä»¥åå¨mongo/PostgreSQL/mysql æ ¹æ®æ°æ®éè¿è¡éæ©
æ¬æç»å¤§å®¶å享çå 容ï¼æ°æ®åå¨å¨mysqlä¸ã
å¤æ³¨ï¼å ³äºmysql çå ·ä½å®è£ ï¼å¤§å®¶å»ä¸ç½æ¥æ¾ä¸ä¸ãï¼root,12345678)
大家å¨å¦ä¹ è¿ç¨ä¸ï¼å¦ææä»»ä½çé®é¢ï¼å¯ä»¥ç½ç«çè¨
create database faiss_qa;
use faiss_qa;
CREATE TABLEÂ â
âanswer_infoâ
â (
â
âidâ
â int(11) NOT NULL AUTO_INCREMENT,
â
âanswerâ
â mediumtext COLLATE utf8mb4_bin,
PRIMARY KEY (â
âidâ
â),
KEYÂ â
âanswer_info_index_idâ
ââ (â
âidâ
â)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
5-6 ç´¢å¼æ建
$ python main.py --taskmedical--index --n_total 120000
5-7ææ¬è¯ä¹ç¸ä¼¼åº¦å¹é æç´¢
$ python main.py --task medical --search --sentence å°å®ä¿¡è´·
å®æä¸è¿°åè½åï¼æ们å¯ä»¥å¨æ¤åºç¡ä¸ï¼æ ¹æ®ä¸å¡ä¸åæ建ä¸äºç¸å ³åºç¨ï¼ä¾å¦ï¼
- å¯ä»¥å®ç°FAQæºè½é®ç
- å¯ä»¥å®ç°æ°é»èµè®¯å 容类ææ¬è¯ä¹å¹é å¬å
- å¯ä»¥å®ç°åºäºææ¬è¯ä¹çä¸ææ£ç´¢ç³»ç»
对è¾å ¥æ°æ®å¾®å°çå·®å«ççæä»ä¹ä¸åï¼
5-8ææ¬è¯ä¹FAQé®çæºå¨äºº-APIæ¥å£
é¦å ï¼æ们å¯å¨æå¡ï¼python app.py
ç¶åï¼è¯·æ±API æå¡å°åæ¥çæ£ç´¢æ£ç´¢
$ curl -H "Content-Type:application/json" -X POST --data '{"query": "xxæä¹æ²»ç"}'ââhttp://localhost:5000/api/v1/searchââ| jq
5-9ææ¬è¯ä¹FAQé®çæºå¨äºº-Webçé¢
å¯å¨æå¡ python app.pyï¼ç¶å访é®å°åââhttp://xx.xx.xx.xx:5000/ââ
ç¨æ·è¡¨è¾¾çç»å¾®å·®å«ï¼éè¿ææ¬è¯ä¹å¹é æ»ä¹è½æ¾å°æä½³ççæ¡ï¼æç»åé¦ç»ç¨æ·ã
ä¾å¦ï¼ 两ç§è¯è¨è¡¨è¾¾ççææ
第ä¸å¥ï¼ å°å©åæååä»ä¹
第äºå¥ï¼ å°å©åæåä¸è½åä»ä¹
ä¸è¿°ææ¾è¡¨è¾¾çæ¯ä¸¤ä¸ªå«ä¹ï¼èéè¿ææ¬è¯ä¹çæ¹å¼ä¹å¾å¥½å¾è¯å«åºæ¥äºï¼ææè¿ä¸éã
æ们ççå端æå¡å°åæ°æ®
注æï¼FAQç³»ç»ä¾èµbert-serving æå¡ï¼è¯·ç¡®è®¤æ£å¸¸å·¥ä½ã
ââhttp://xx.xx.xx.xx:5000/statusââ
{
âstatusâ:âsuccessâ,
âipâ:â127.0.0.1â,
âportâ:5555,
âidentityâ:âcbc94483-1cd6-406d-b170-0cb04e77725bbâ