該計畫最初是為索菲亞大學的人工智慧課程設計的。在執行過程中,我受到時間限制,無法實現我的所有想法,但我計劃繼續研究它......並且我確實選擇了我的碩士論文主題,使用T5 Transformers 生成問題 -答案與乾擾項配對。在 Question-Generation-Transformers 儲存庫中查看它。
用於識別用作目標答案的關鍵字的方法已被 RANLP2021 會議接受 - 為測驗產生候選答案和答案感知問題產生器。
這個想法是透過將這個複雜的問題分解為更簡單的步驟,從文本中產生多項選擇答案:
為了避免與其他專案中的 python 套件發生任何衝突,最好建立一個將安裝這些套件的虛擬環境。如果您不想這樣做,您可以跳過接下來的命令並直接安裝requirements.txt 檔案。
建立虛擬環境:
python -m venv venv
進入虛擬環境:
視窗:
. .venvScriptsactivate
Linux 或 MacOS
source .venvScriptsactivate
在 venv 中安裝 ipython:
ipython kernel install --user --name=.venv
在 venv 中安裝 jupyter lab:
pip install jupyterlab
pip install -r .requirements.txt
jupyter lab
在我做任何事之前,我想更多地了解問題是如何提出的以及答案是什麼樣的。
我使用了 SQuAD 1.0 資料集,其中包含從維基百科文章產生的大約 100 000 個問題。
您可以閱讀我在資料探索jupyter 筆記本中找到的見解。
我的假設是文本中的文字可以很好地回答問題。我所需要做的就是決定哪些單字或短語足以成為答案。
我決定對文本中的每個單字進行二元分類。 spaCy 在單字標記方面確實幫了我很大的忙。
我非常需要為二元分類建立整個資料集。我從 SQuAD 資料集中每個問題的段落中提取了每個不間斷的單詞,並在其上添加了一些功能,例如:
標籤isAnswer - 從段落中提取的單字是否與 SQuAD 問題的答案相同且位於同一位置。
其他一些功能(例如TF-IDF分數和與標題的餘弦相似度)會很棒,但我沒有時間添加它們。
除此之外,創建新功能取決於我們的想像力- 也許無論是在句子的開頭、中間還是結尾,有關它周圍的單詞的信息等等......儘管在添加更多功能之前最好有評估該功能是否有用的指標。
我發現這個問題類似於垃圾郵件過濾,其中常見的方法是將電子郵件的每個單字標記為來自垃圾郵件或不是垃圾郵件。
我使用 scikit-learn 的高斯樸素貝葉斯演算法來對每個單字是否是答案進行分類。
結果出乎意料地好——乍一看,演算法將大部分單字分類為答案。那些沒有做到的其實是不適合的。
樸素貝葉斯的最酷之處在於您可以獲得每個單字的機率。在演示中,我使用它來對單字進行排序,從最有可能的答案到最不可能的答案。
我的另一個假設是答案的句子可以很容易地變成一個問題。只需在文本中答案的位置放置一個空格,我就會得到一個“完形填空”問題(句子中缺少單字的空格)
答案:氧氣
問題: _____是一種化學元素,符號為O,原子序為8。
我認為將完形填空問題轉換為更像問題的句子是不值得的,但我想這可以透過seq2seq 神經網路來完成,類似於將文字從一種語言翻譯成另一種語言的方式。
這部分結果非常好。
對於每個答案,我使用單字嵌入和餘弦相似度產生最相似的單字。
大多數單字都很好,很容易被誤認為是正確答案。但也有一些明顯不合適的。
由於我沒有包含錯誤答案的資料集,因此我採用了更經典的方法。
我刪除了與答案不同詞性或相同命名實體的單詞,並從問題中添加了更多上下文。
我想找到一個包含多項選擇答案的資料集,看看是否可以建立一個ML 模型來產生更好的錯誤答案。
在添加 Demo 專案後,生成的問題不太適合立即進入課堂,但也不錯。
最酷的事情是該方法的簡單性和模組化,您可以找到它做得不好的地方(例如它對動詞進行分類)並插入修復。
擁有一個複雜的神經網路(就像所有有關該主題的論文一樣)可能會做得更好,尤其是在我們所處的時代。但我發現這種方法的偉大之處在於,它就像軟體工程師以軟體工程思維進入人工智慧領域並看到有意義的結果的門戶。
我發現這個話題很有趣並且有很大的潛力。我可能會繼續在這個領域工作。
我甚至參加了資料探勘碩士課程,並且可能會做一些類似的專案。我將在這裡鏈接任何有用的內容。
我已經投入了更多時間來完成該項目,但我想將其更多地轉變為有關進入人工智慧領域的教程,同時能夠使用新的自訂功能輕鬆擴展它。
更新 - 29.12.19:儲存庫變得非常流行,因此我添加了一個新筆記本( Demo.ipynb ),它組合了所有模組並為任何文字產生問題。我重新排序了其他筆記本並記錄了程式碼(好一點)。
更新 - 09.03.21:新增了一個requirements.txt 文件,其中包含運行虛擬環境的說明,並修復了ValueError 的錯誤:操作數無法與形狀一起廣播 (230, 121) (83, )
我也開始寫我的碩士論文,主題是類似的「問題生成」。
更新 - 21.10.27:我已將碩士論文的程式碼上傳到 Question-Generation-Transformers 儲存庫中。我強烈建議您檢查一下。
此外,使用分類器來選擇候選答案的方法已被 RANLP2021 會議接受為學生論文。紙在這裡。