#203 - Duolingo sử dụng AI trong ứng dụng của họ như thế nào
Những bài viết hay
How Duolingo uses AI in every part of its app — venturebeat.com
Duolingo sử dụng AI ở khắp nơi trên ứng dụng. AI đứng sau các tính năng như Stories, Smart Tips, podcast, report và thậm chí là gửi thông báo. Tất cả điều đó mang lại trải nghiệm học ngoại ngữ siêu việt. Công ty từng công bố một báo cáo nói rằng ngưởi dùng Duolingo sẽ đạt kết quả kiểm tra về đọc và nghe tốt tương đương với sinh viên học bốn kì ở đại học, trong khi chỉ học bằng một nửa thời gian.
Một trong những dự án AI đầu tiên của công ty là hệ thống lặp lại ngắt quãng (spaced repetition system) được phát triển vào năm 2013. Mô hình của họ có thể dự đoán khi nào bạn đã quên một thứ gì đó vì bạn chưa xem nó thường xuyên hoặc gần đây. Ngày nay, Duolingo sử dụng hệ thống này để giúp chọn các thử thách mà nằm trong các buổi thực hành của bạn. Cứ mỗi bài học, Duolingo quyết định xem bài tập nào nên đưa cho bạn dựa theo từ ngữ hoặc khái niệm mà ứng dụng tin là bạn cần thực hành.
Toàn bộ điều trên trở thành hiện thực là nhờ một hệ thống Machine Learning có tên là Birdbrain. Birdbrain điều chỉnh độ khó của bài học dựa trên độ khó của một câu cụ thể nào đó với bạn. Nếu bạn trả lời đúng tất cả, hệ thống sẽ thử đưa các bài tập mà nó nghĩ bạn chỉ có 70% cơ hội trả lời đúng. Nếu bạn trả lời sai nhiều câu, hệ thống sẽ bắt đầu đưa cho bạn các câu hỏi dễ hơn. Có thể coi Birdbrai như là một hệ thống cá nhân hóa học tập tân tiến. Nó là một hệ thống khổng lồ được huấn luyện mỗi tối trên khoảng nửa tỉ bài tập được thực hiện vào ngày trước đó.
Việc biết dịch một từ đơn là chưa đủ để giao tiếp hiệu quả bằng ngoại ngữ. Cấu trúc câu và sự thấu hiểu cũng rất quan trọng. Do đó Duolingo phát triển một tính năng có tên là Smart Tips, dùng công nghệ Xử lý ngôn ngữ tự nhiên (NLP), để hiểu lý do thực sự sau mỗi lỗi sai của người dùng rồi đưa ra các chỉ dẫn phù hợp.
AI còn được sử dụng để cải thiện hiệu quả của tính năng thông báo. Ứng dụng có thể chọn thời điểm và nội dung tối ưu để gửi thông báo dựa trên hành vi của ngưởi dùng trên ứng dụng chỉ sau vài ngày, thậm chí là một ngày.
Khi bạn tin rằng mình gửi câu trả lời đúng trên Duolingo và bị thông báo là sai, bạn có thể nhấn nút "Report" để phản đối. Mỗi tuần Duolingo nhận khoảng từ nửa triệu đến một triệu report như vậy và 90% là rác. Chúng thường là lỗi gõ nhầm hoặc ngưởi dùng sai nhưng họ nghĩ là họ đúng. Để giải quyết vấn đề này, Duolingo đã xây dựng một hệ thống Machine Learning sử dụng Logistic Regression để lọc tìm các report hữu ích.
Ứng dụng còn sử dụng thuật toán Machine Learning không giám sát để xây dựng một công cụ quyết định độ khó của một văn bản ngoại ngữ theo chuẩn Common European Framework of Reference (CEFR). Duolingo có Stories tab - là một tính năng mang tới những câu chuyện ngắn để kiểm tra khả năng đọc hiểu của người dùng. Tính năng Stories sử dụng CEFR Checker để kiểm tra xem liệu độ khó của các câu chuyện có phù hợp với người dùng hay không.
Measuring Web Performance at Airbnb — medium.com
Khi xây dựng một website và cần đo đạc performance, thường bạn sẽ đo những chỉ số gì? Cách đo Page Load có vẻ phổ biến nhưng bắt đầu ít hữu dụng hơn khi các ứng dụng web sử dụng kiến trúc Single Page ngày càng phổ biến.
Trong bài viết này, đội ngũ xây dựng sản phẩm ở AirBnB chia sẻ những chỉ số mà họ đang dùng để đo lường hiệu năng của trang web AirBnB nhằm tạo cơ sở để giúp cho trải nghiệm người dùng được tốt hơn.
Time To First Contentful Paint (TTFCP). Chỉ số này sẽ đo thời gian từ lúc người dùng bắt đầu một thao tác chuyển trang (click menu, đổi tab, ...) cho đến lúc một hình ảnh nào đó xuất hiện trên màn hình. Hình ảnh này có thể là text, biểu tượng loading, ... nhằm giúp cho người dùng biết được website đang thực hiện thao tác chuyển trang.
Time To First Meaningful Paint (TTFMP). Chỉ số này đo thời gian từ lúc người dùng bắt đầu thao tác chuyển trang cho đến lúc một thông tin hữu ích nào đó bắt đầu xuất hiện trên màn hình, ví dụ như ảnh banner hoặc tiêu đề bài viết.
First Input Delay (FID) đo thời gian từ lúc người dùng bắt đầu thao tác chuyển trang đến lúc trình duyệt có thể phản hồi lại với tương tác của người dùng như scroll trang, bấm input, ...
Total Blocking Time (TBT) đo tổng thời gian main thread bị blocked (javascript trên browser là một ngôn ngữ đơn thread). TBT càng cao thì trang web càng dễ bị treo và phản hồi không mượt.
Cumulative Layout Shift (CLS) đo lường việc bố cục trang web bị thay đổi một cách bất ngờ, ví dụ như một khi người dùng bấm vào một modal form để nhập thông tin, phần thông điệp lỗi xuất hiện trên đầu đẩy các nội dung input xuống, sự thay đổi này gọi là CLS.
Góc Database
Sự nở rộ của Big Data và các công nghệ liên quan cũng dẫn đến sự cần thiết của một họ thuật toán được dùng để tính toán xấp xỉ các tập dữ liệu lớn một cách hiệu quả hơn (về mặt bộ nhớ cũng như CPU), họ thuật toán này hay được gọi là sketching algorithm. Các sketching algorithm được dùng để tạo ra và tính toán dựa trên các data sketch (mẫu phác thảo dữ liệu).
Chúng ta có thể hình dung một tập dữ liệu đầy đủ (full data set) như một bức tranh phức tạp với rất nhiều chi tiết, còn một mẫu phác thảo dữ liệu (data sketch) như một bộ khung phác thảo nhằm giúp người nghệ sỹ có thể hình dung một cách đại khái về bức tranh mà mình sẽ vẽ. Sử dụng các sketching algorithm kết hợp với các data sketch data structure, chúng ta có thể ước tính được các đặc tính của tập dữ liệu mà không phải xử lý hết toàn bộ dữ liệu gốc, đây là điều rất cần thiết trong thế giới Big Data hiện đại.
Ở hai kỳ newsletter trước chúng ta đã biết đến HyperLogLog (2007) và MinHash (1997), hai thuật toán giúp ước tính kích cỡ (HyperLogLog) cũng như tìm tỉ lệ tương đồng (MinHash) của hai tập hợp. Kết hợp hai thuật toán này với nhau là cần thiết nếu chúng ta muốn thực hiện thao tác ước tính kích cỡ cho các tập dữ liệu lớn một cách riêng lẻ cũng như các tập hợp (union), giao (intersect), bù trừ (difference) của các tập dữ liệu này.
Tuy nhiên làm sao để kết hợp hai thuật toán này? Cách đơn giản nhất là đối với từng tập dữ liệu, lưu hai cấu trúc HLL sketch và MinHash sketch một cách riêng biệt và lấy ra sử dụng khi cần. Liệu có cách nào kết hợp hai thuật toán và cấu trúc dữ liệu này lại với nhau một cách tổng quát hơn không?
Nhiều nhà khoa học máy tính đang theo đuổi đề tài này. Ở mục Góc Database kỳ này mời các bạn cùng tìm hiểu về HyperMinHash, một cách tiếp cận được đề xuất bởi Yun William Wu và Griffin M. Weber có mục tiêu kết hợp HyperLogLog và MinHash lại với nhau.
Các bạn có thể tìm hiểu thông qua video (ở trên) hoặc paper công bố năm 2015 ở đây.
Góc Lập Trình
Đề tuần này:
Lời giải tuần trước:
Đề tuần này: Swapping Nodes in a Linked List.
Lời giải tuần trước:
Đề bài: Making A Large Island
Lời giải:
Đề bài cho ta ma trận nhị phân nxn và cho phép ta đổi nhiều nhất một ô 0 thành 1 để tạo thành 1 đảo lớn hơn. Đề bài hỏi diện tích lớn nhất mà ta có thể tạo được.
Nếu bạn đọc đã làm những bài tương tự như bài Number of Islands, ta có thể dễ dàng nhận ra một cách tiếp cận như sau: "tại từng ô 0, ta tạm thời đổi thành ô 1, sau đó thực hiện DFS hoặc BFS để tìm đảo có diện tích lớn nhất". Cách tiếp cận này cho ta giải thuật có độ phức tạp time complexity là O(n^4), với n là độ dài của ma trận.
Để tối ưu bài này, ta cần thực hiện một tiền xử lý: "tìm diện tích của các đảo hiện tại". Sau đó, tại mỗi ô 0, ta chỉ cần kiểm tra các ô liền kề: "trên, dưới, trái, phải", để tìm được diện tích lớn nhất mà ta có thể tạo được.
Tuy nhiên, ta cần chắc chắn rằng các ô liền kề không thuộc cùng một đảo. Để có thể phân biệt các đảo khác nhau, ta cần thực hiện "tô màu" như hình sau:
Như hình trên, nếu ta đổi ô 0 (được đóng khung đỏ) thành 1, ta đã thực hiện kết nối 3 đảo riêng biệt với nhau.
Giải thuật được thực hiện như sau: https://pastebin.com/F7EXgHsX
Để code phù hợp với phần giải thích, tôi đã sử dụng mảng "color" để đánh dấu màu của các đảo riêng biệt. Tuy nhiên, ta có thể lược bỏ mảng này, bằng cách sử dụng mảng đầu vào mới màu bắt đầu là "3".
Giải thuật có độ phức tạp time complexity là O(n^2) với n là độ dài của ma trận.
Tech Talks
Multi-Tenancy Best Practices for Google Kubernetes Engine — www.youtube.com
Đối với nhiều công ty hay tổ chức, việc chia sẻ một cluster Kubernetes giữa nhiều teams hay workloads khác một cách an toàn và hiệu quả là một nhu cầu thiết yếu. Kết hợp giữa Google Cloud IAM và các tính năng cơ bản của Kubernetes, Google Kubernetes Engine (GKE) giúp bạn có thể host các workloads từ nhiều users (teams) khác nhau một cách an toàn dưới sự kiểm soát của các chính sách chi tiết, linh hoạt.
Trong buổi Tech Talk này, các speakers từ GCP sẽ thảo luận về các tính năng giúp xây dựng Multi-tenancy trong một GKE cluster và chia sẻ những best practices như Identity, Access Control, Container Privilege Reduction, Scheduling, và Network Security. Đồng thời các diễn giả cũng chia sẻ những định hướng để có thể xây dựng Multi-tendency một cách an toàn và hiệu quả hơn nữa trong tương lai.
Góc Sponsors
One Mount là tập đoàn kiến tạo hệ sinh thái công nghệ lớn nhất Việt Nam, cung cấp các giải pháp và dịch vụ xuyên suốt chuỗi giá trị, từ lĩnh vực dịch vụ tài chính, phân phối, bất động sản và bán lẻ, với ba sản phẩm chủ lực: VinShop, VinID, OneHousing.
Với trụ sở tại Hà Nội, Hồ Chí Minh và quy tụ hơn 1.500 nhân sự xuất sắc, One Mount tâm huyết xây dựng môi trường làm việc:
Đề cao “Giá trị của công việc ý nghĩa”
Quy tụ nhân tài Việt trên toàn cầu
Văn hóa thành công cùng nhau vươn tới đỉnh cao
Các vị trí hấp dẫn đang mở tuyển:
Back-end Engineer (Java/Golang), Front-end Engineer (ReactJS, Angular), Mobile Developer (iOS, Android)
Data Analysis, Data Engineer, Data Scientist
Business Analysis, QC Engineer
Tham khảo các thông tin về văn hóa, môi trường làm việc, cơ hội nghề nghiệp tại One Mount:
Website: https://careers.onemount.com/
Quotes
A language that doesn't affect the way you think about programming is not worth knowing.
Alan J. Perlis