Dự án nhỏ: IELTS Suggestor
Giới thiệu
Mình hiện đang chuẩn bị cho kỳ thi IELTS. Nó đánh giá khả năng nghe, đọc, viết và nói tiếng Anh của mình và rất cần thiết cho nhiều cơ hội học tập và nghề nghiệp ở nước ngoài.
Trong quá trình này, mình nhận ra rằng bài kiểm tra kỹ năng viết đã gây khó khăn cho mình vì chủ đề của nó rất rộng và thường không phù hợp với sở thích của mình. Mình nảy ra ý tưởng sử dụng mô hình ngôn ngữ lớn để giúp mình bằng cách gợi ý các ý liên quan đến chủ đề trong bài thi kỹ năng viết phần 2. Trong blog này, mình sử dụng Langchain để thể hiện ý tưởng sử dụng LLM làm công cụ gợi ý ý tưởng cho bài viết IELTS task 2.
IETLS
Để bắt đầu, mình muốn giới thiệu sơ qua về kỳ thi IELTS. IELTS, viết tắt của Hệ thống kiểm tra tiếng Anh quốc tế (International English Language Testing System), là một kỳ thi tiêu chuẩn được quốc tế công nhận, dùng để đánh giá khả năng tiếng Anh của những người không phải là người bản xứ. Nó nhằm mục đích đánh giá khả năng nghe, đọc, viết và nói của người thi.
IELTS được chấp nhận rộng rãi bởi các trường đại học, doanh nghiệp và cơ quan quản lý nhập cư ở nhiều quốc gia nói tiếng Anh, khiến nó trở thành một bước thiết yếu đối với bất kỳ ai muốn học tập, làm việc hoặc định cư tại các quốc gia này (đặc biệt đối với mình nếu bản thân muốn đi du học hoặc làm việc nước ngoài). Nó được đồng quản lý bởi Hội đồng Anh, IDP Education và Cambridge Assessment English, đảm bảo rằng nó được chấp nhận và hợp pháp trên toàn cầu.
Vì thí nghiệm chỉ tập trung vào phần viết bài nên mình cũng muốn nói về nó. Phần viết của bài kiểm tra IELTS bao gồm hai nhiệm vụ phải hoàn thành trong 60 phút. Mỗi task có yêu cầu và số lượng từ cụ thể (giới hạn dưới của task 1 và task 2 lần lượt là 150 và 250 từ). Hiện tại, phần 2 là điều duy nhất mình quan tâm. Bài tập này liên quan đến việc viết một bài luận:
- Câu trả lời có thể bày tỏ quan điểm, lập luận hoặc vấn đề và yêu cầu tôi mô tả quan điểm của mình, đồng ý hoặc không đồng ý với khẳng định đó hoặc đề xuất các giải pháp thay thế.
- Mình cần phải chứng minh kiến thức thấu đáo về câu trả lời , đưa ra lập luận có tổ chức và chứng minh các tuyên bố của mình bằng các sự kiện và ví dụ.
Rõ ràng, task 2 chủ yếu là thể hiện quan điểm cá nhân, việc đánh giá đúng sai cũng sẽ mang tính chủ quan. Vì vậy, IELTS đã đưa ra một thang điểm chuẩn để thể hiện những tiêu chí mà họ quan tâm trong một bài viết để có thể đánh giá điểm của bài viết đó.
Thí nghiệm
Hãy nhớ rằng thử nghiệm này chỉ là một bằng chứng về khái niệm (PoC) sử dụng Langchain làm công cụ gợi ý ý tưởng cho bài viết IELTS task 2.
Thử nghiệm bắt đầu bằng việc cài đặt và thiết lập các thư viện cần thiết cũng như xác định một số chức năng trợ giúp:
%pip install -q -U langchain-core langchain-community langchain-openai
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
import textwrap
from IPython.display import Markdown
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
Quá trình này bao gồm:
- Xác định lời nhắc (prompt): về cơ bản, mình giao cho LLM một vai trò và một nhiệm vụ để nó đưa ra câu trả lời.
- Chọn một mô hình.
- Xác định chuỗi (bạn có thể tìm thêm thông tin chi tiết về chuỗi Langchain tại đây)
template = """
As an examiner of IELTS system, you can suggest me an answer about {topic} with
more than 250 words and below 300 words regading to {band}.
"""
prompt = ChatPromptTemplate.from_template(template)
Thông qua prompt, mình muốn mô hình tự coi mình như một giám khảo, để nó có kiến thức về các yêu cầu cơ bản của kỳ thi và đưa ra các khuyến nghị từ quan điểm của giám khảo. Tuy nhiên, vẫn chưa có thông tin bổ sung nào cho phép người mẫu hiểu thêm về việc trở thành giám khảo IELTS.
OPENAI_API_KEY = 'OPENAI_API_KE'
model = ChatOpenAI(model="gpt-3.5-turbo",
api_key=OPENAI_API_KEY)
output_parser = StrOutputParser()
Khi kết thúc quá trình, tôi xác định chuỗi bằng cách sử dụng “|” theo Ngôn ngữ biểu thức Langchain (LangChain Expression Language - LCEL). Lưu ý rằng, | ký hiệu có thể so sánh với toán tử đường ống Unix ở chỗ nó kết nối một số thành phần và cung cấp đầu ra của một thành phần làm đầu vào cho thành phần tiếp theo.
chain = prompt | model | output_parser
topic = """
Some people think that parents should teach their children how to be good members of society.
Others, however, believe that school is the best place to learn this.
Discuss both views and give your own opinion.
"""
band_score = 7.5
answer = chain.invoke({"topic": topic,
"band": band_score})
to_markdown(answer)
Trong chuỗi này, đầu vào của tôi được gửi đến prompt, sau đó đầu ra của prompt được chuyển tới mô hình và cuối cùng đầu ra của mô hình được chuyển đến trình phân tích cú pháp đầu ra
Code mình để ở đây: Colab
All rights reserved