當機器人收到影片作為學習內容時,它會自動進入所設置的學習模式。在這學習模式中,我們為使用者提供了四大策略來加強學習體驗:透過影片內容進行摘要學習、影片詞彙學習、透過影片例句學習文法,以及開放式的延伸學習。
在本文中,我會對每一種學習策略背後的運作框架與實際實驗結果進行簡易的說明。希望能讓大家更快速的理解到每種策略的設計初衷與效果。對於那些希望深入研究或閱讀相關程式碼的讀者,我希望這些內容能為你提供清晰的指引,使你在解讀程式碼時能有更順暢的體驗。
在摘要學習中,核心功能分為兩個主要步驟:第一步是從影片中提取關鍵內容作為摘要;第二步則是將這些摘要資訊交付給專為教學設計的摘要教學程序。這兩個步驟由SequentialChain進行整合。啟用此功能時,需要提供四項參數:learning_lang
、user_lang
、video_document
和 input
。最終,系統會生成並輸出 video_digest
和 text
。
以下是實際的整合執行鏈範例:
doc_test = load_document_from_srt_file(default_youtube_video_file)
digest_teaching_overall_chain({
'user_lang': user_lang,
'learning_lang': learning_lang,
'input': '我看不太懂這影片的內容耶',
'video_content': doc_test,
})
--- 以下為輸出結果 ---
'嗨!歡迎來到印尼!在這個影片中,內容主要圍繞著創作者們所點的食物。他們展示了各種菜餚,像是辣椒豆腐、豆餅和米飯。在漫長的旅程後,他們表達了飢餓感並且享受這些美食。影片接著轉移到他們在馬卡薩爾的Best Western酒店住宿,展示了從他們的公寓所看到的景色。他們繼續前往馬諾利,那裡他們遇到了一位當地音樂家正在為鄰里舉行音樂會。影片還展示了馬利諾地區的一個美麗瀑布和一座搖晃的吊橋。他們嚐試了一種叫做marquisa的百香果,並且繼續騎摩托車前往比拉海灘,在那裡他們發現了令人驚嘆的稻田。\n\n這個影片充滿了印尼的美食、風景和文化。如果你正在學習英文,這個影片可以幫助你練習聽力和理解能力。同時,你也可以透過這個影片了解印尼的文化和風景。希望你會喜歡這個影片!
詞彙教學的方法雖與摘要學習有些相似之處,但仍有其獨特的運作細節。這個功能會先從影片中隨機選取一些句子,再從這些句子中抽取出特定詞彙,作為本次的教學重點。最終步驟,則是利用一個詞彙教學生成模型來完成輸出。您或許已經發現,不論是哪個功能,最後一步都會牽涉到生成模型。這是因為我們遵循一個特定的設計模式:先整理並處理必要的基礎資料,再透過生成模型完成最後的輸出。
以下是一個實際的程式執行範例:
lexicon_teaching_params = {
"selected_lexicons":'celebration, stories, art, storytelling, history',
'input': '我想多學一些生活上可以使用的詞彙',
"learning_lang": learning_lang,
}
lex_teaching_chain = get_lex_teaching_chain()
lex_teaching_chain(lexicon_teaching_params)
--- 以下為輸出結果 ---
{'selected_lexicons': 'celebration, stories, art, storytelling, history',
'input': '我想多學一些生活上可以使用的詞彙',
'learning_lang': '英文',
'text': '當然!我很樂意教你一些生活中常用的詞彙。讓我們開始吧!\n\n首先,我們來學習「celebration」這個詞彙。它的意思是慶祝活動。例如,"We had a big celebration for my birthday last week."(上週我們為我的生日舉辦了一個盛大的慶祝活動。)\n\n接下來 ... 中間省略... 希望這些詞彙對你有所幫助!如果你有任何問題,請隨時向我提問。'}
上面提到的設計範式,在這個功能的實做更是明顯,我們這個功能主要是要針對挑選出來的例句,生成一個更完整的教學內容。這些教學內容包含了 原文例句(隨機例句選擇)、例句的翻譯、文法介紹等,而最後一個文法教學則是將上面所有的元素,生成為一個完整的教學內容,大家可以實際使用程式碼測試看看。
實際的集成執行鏈執行範例如下:
test_document = load_document_from_srt_file(default_youtube_video_file)
gramma_teaching_overall_chain({
'user_lang': user_lang,
'learning_lang': learning_lang,
'video_content': test_document,
'input': '可以教我一些影片內使用的文法嗎?',
})
--- 以下為輸出結果 ---
{'user_lang': '中文',
'learning_lang': '英文',
'video_content': ["welcome to indonesia so here's our food which we ordered",
... 中間省略 ...
'rice fields and also there and there amazing'],
'input': '可以教我一些影片內使用的文法嗎?',
'random_pick_caption': '"at four o\'clock in the night tahu (tofu) with some chili what else do we"',
'translated_caption': '"凌晨四點吃豆腐加一些辣椒還有什麼其他的"',
'gramma_intro': '這個例句中使用了以下的文法和單字:\n\n1. "at four o\'clock" - 表示時間的片語,表示在四點的時候。這裡使用了 "at" 來表示特定的時間點。\n\n2. "in the night" - 表示時間的片語,表示在晚上。這裡使用了 "in" 來表示特定的時間範圍。... 中間省略 ... 4. "with some chili" - 表示伴隨著一些辣椒。這裡使用了 "with" 來表示伴隨的關係。\n5. "what else do we" - 這是一個疑問句,用來詢問除了前面提到的東西之外還有什麼。這裡使用了 "what else" 來表示除了已經提到的之外的其他事物。\n\n希望這些介紹對你有幫助!'}
「延伸學習」功能的目的是為了提供學習者更深入、更廣泛的學習資料。當使用者查詢某個詞彙時,這個功能會基於該詞彙提供更多相關的學習內容,使學習者可以更全面地了解和掌握。因此,此功能的操作和應用都相對直觀。
以下是該功能的示範範例:
related_lex_chain({
'user_lang': user_lang,
'learning_lang': learning_lang,
'input': '你剛提到的 at four o\'clock 通常會怎麼使用呢?'
})
--- 以下為輸出結果 ---
{'user_lang': '中文',
'learning_lang': '英文',
'input': "你剛提到的 at four o'clock 通常會怎麼使用呢?",
'text': 'at four o\'clock 是用來表示時間的片語,通常用於指定某個具體的時間點。以下是一些相關的詞彙以及例句:\n\n1. at: 表示在某個具體的時間點\n - I have a meeting at four o\'clock. (我四點有個會議。)\n - She always goes for a run at six in the morning. (她每天早上六點總是去跑步。)\n\n2. o\'clock: 表示整點\n - The train will arrive at six o\'clock. (火車將在六點整到達。)\n - Let\'s meet for dinner at eight o\'clock. (我們八點整見面吃晚餐吧。)\n\n3. usually: 表示通常情況下\n - I usually have breakfast at seven o\'clock. (我通常七點吃早餐。)\n - They usually start work at nine o\'clock. (他們通常九點開始工作。)\n\n希望這些詞彙和例句能幫助你更好地理解和使用 "at four o\'clock" 這個片語。如果你還有其他問題或需要進一步的學習資源,請隨時告訴我。'}
在完整實現所有學習模式任務之後,我們加入了一個名為 learning_mode_phase_handler
的路由處理功能。該功能內部配置了 learning_mode_router_chain
作為訊息路由決策的執行鏈,同時還有一個預設的引導訊息生成模型 learning_mode_guide_chain
。因此,當使用者傳送一條訊息給系統,只需要將該消息傳遞給 learning_mode_phase_handler
進行相應處理。這個處理器會根據訊息內容,選擇適當的學習策略,並返回合適的回應。
學習模式的操作範例如下:
learning_document = load_document_from_srt_file(default_youtube_video_file)
leanring_mode_phase_handler('教我幾個影片內的單字')
--- 以下為輸出結果 ---
當然!我很樂意教你一些影片中的單字。首先,我們來學習 "tempeh" 這個詞彙。Tempeh 是一種由大豆製成的食物,它是一種富含蛋白質的素食選擇。例如,你可以說 "I love cooking with tempeh. It's a great source of plant-based protein."
接下來,我們來學習 "gifts" 這個詞彙。Gifts 意指禮物,通常是用來表示對某人的關愛或感謝之情。例如,你可以說 "I bought some gifts for my family during my trip abroad."
... 中間省略 ...
希望這些詞彙對你有所幫助!如果你有任何其他問題,請隨時告訴我。
想要更深入了解每一學習策略的具體實作和整體的路由設計,請參考:D29. LangChain 專案實做 - ChatBot 的整合(中).ipynb。
本文可能未涉及所有實作的細節,但基於先前的文章已詳細介紹了相關概念,所以您在閱讀時應該能輕鬆理解。感謝大家的支持和陪伴!