Giới thiệu dự án

Nhu cầu làm chủ tiếng Anh trong bối cảnh hội nhập quốc tế và chuyển đổi số đang tăng trưởng nhanh chóng. Theo dữ liệu từ Google Trends tại thị trường Việt Nam, mức độ quan tâm đối với các giải pháp tra cứu và học từ vựng tiếng Anh luôn duy trì ở mức cao trên thang điểm tìm kiếm. Tuy nhiên, rào cản lớn nhất của người học nằm ở sự suy giảm trí nhớ theo thời gian (đường cong quên lãng Ebbinghaus) khi tiếp cận từ vựng theo phương pháp ghi chép truyền thống thụ động, thiếu liên kết ngữ cảnh và không có cơ chế lặp lại ngắt quãng khoa học.

                  ĐƯỜNG CONG QUÊN LÃNG & CƠ CHẾ LẶP LẠI
   100% |--- [Học lần đầu]
        |        \               [Ôn tập R1]
    80% |         \             /     \           [Ôn tập R2]
        |          \           /       \         /     \
    50% |           \ [Quên]  /         \       /       \
        |            \       /           \     /         \
    20% |             \_____/             \___/           \___ [Ghi nhớ dài hạn]
        +------------------------------------------------------------> Thời gian

Đồ án tập trung giải quyết 3 điểm nghẽn kỹ thuật và trải nghiệm người dùng:

  1. Thiếu tính tương tác và trực quan hóa: Các ứng dụng từ điển truyền thống chủ yếu cung cấp định nghĩa dạng văn bản thuần túy, thiếu hình ảnh minh họa, phát âm chuẩn xác và ví dụ theo ngữ cảnh thực tế.
  2. Khả năng hoạt động gián đoạn khi mất mạng: Phần lớn ứng dụng phụ thuộc vào kết nối máy chủ liên tục, gây gián đoạn trải nghiệm học tập khi người dùng di chuyển hoặc ở khu vực không có sóng.
  3. Thuật toán tìm kiếm thô cứng: Người học khi mới tiếp cận thường gõ sai chính tả, dẫn đến việc không tìm được từ vựng mong muốn nếu ứng dụng chỉ hỗ trợ so khớp chuỗi chính xác (exact match).

Mục tiêu cụ thể của dự án:

  1. Thiết kế và phát triển ứng dụng di động đa nền tảng (Android/iOS) bằng Flutter với giao diện tối ưu hóa trải nghiệm người dùng (UI/UX).
  2. Xây dựng và triển khai thuật toán tìm kiếm mờ (Fuzzy Search) tối ưu hóa dựa trên khoảng cách chỉnh sửa Wagner-Fischer, giảm độ phức tạp không gian từ $O(mn)$ xuống $O(n)$.
  3. Tích hợp Chatbot trí tuệ nhân tạo thông qua Google Dialogflow và Google Cloud API để hỗ trợ tra cứu ngữ nghĩa, giải đáp thắc mắc và cung cấp mini-game nối từ thông minh.
  4. Xây dựng hệ thống quản lý cơ sở dữ liệu Cloud Firestore theo mô hình NoSQL với cơ chế lưu trữ đệm ngoại tuyến (Offline Persistence Cache).
  5. Xây dựng Web Dashboard quản trị toàn diện cho phép theo dõi người dùng, cập nhật bộ từ vựng chuẩn hóa từ Oxford Learner's Dictionaries và điều chỉnh cấu hình hệ thống từ xa.

Phạm vi nghiên cứu tập trung vào sinh viên, người đi làm và người tự học tiếng Anh; triển khai bộ dữ liệu chuẩn 500+ từ vựng phong phú kèm phát âm, hình ảnh, ngữ cảnh và cơ chế đánh giá điểm ghi nhớ (Memory Points).


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát các giải pháp học từ vựng hiện nay cho thấy sự phân hóa rõ rệt giữa ứng dụng tra cứu thuần túy và ứng dụng học tập tương tác:

Tiêu chí Từ điển truyền thống (Laban Dict, TFlat) Flashcard chuyên dụng (Anki, Quizlet) Ứng dụng đề xuất (Vocaday)
Giao diện & Trải nghiệm Dày đặc chữ, giao diện cũ, ít tương tác Tối giản, tập trung vào thẻ, thiếu gamification Hiện đại, trực quan hóa với Lunacy, hỗ trợ Dark/Light Theme
Tìm kiếm từ vựng So khớp tiền tố (Prefix Match) Tìm kiếm chuỗi cơ bản Wagner-Fischer tối ưu hóa (Fuzzy Search sửa lỗi chính tả)
Hỗ trợ Offline Tải gói offline dung lượng lớn Hỗ trợ qua sync thủ công Cloud Firestore Offline Persistence tự động đồng bộ 2 chiều
Tương tác AI Không hỗ trợ Không hỗ trợ Chatbot NLP qua Google Dialogflow xử lý đa luồng ngữ cảnh
Gamification Không có Cơ bản qua Streak Mini-games (Saviour, Word Jumble), bài kiểm tra, điểm danh

Áp dụng phương pháp phân tích yêu cầu MoSCoW:

  • Must have: Xác thực người dùng (Firebase Auth), Học qua Flashcards, Tìm kiếm từ vựng tương đồng (Wagner-Fischer), Bài kiểm tra trắc nghiệm, Cơ chế lưu trữ offline.
  • Should have: Chatbot tra cứu thông minh (Dialogflow), Hệ thống tính điểm và thăng cấp bậc, Web Dashboard quản trị, Đa ngôn ngữ (Anh/Việt).
  • Could have: Mini-game Word Jumble và Saviour, Hệ thống xếp hạng người dùng theo tuần/tháng.
  • Won't have (phiên bản hiện tại): Đấu đối kháng thời gian thực (Real-time PvP), Nhận diện phát âm bằng AI Voice Recognition.

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc 3 tầng (3-Tier Architecture) kết hợp mô hình Serverless trên nền tảng Google Cloud và Firebase:

+-------------------------------------------------------------------------+
|                           PRESENTATION LAYER                            |
|  +-----------------------------------+  +----------------------------+  |
|  |       Mobile Client (Flutter)     |  |     Web Dashboard (HTML5)  |  |
|  | - UI Widgets & Material System    |  | - Data Analytics & Charts  |  |
|  | - Provider State Management       |  | - Dynamic System Config    |  |
|  +-----------------+-----------------+  +--------------+-------------+  |
+--------------------|-----------------------------------|----------------+
                     | HTTPS / gRPC                      | REST API
+--------------------v-----------------------------------v----------------+
|                            APPLICATION LAYER                            |
|  +-----------------------+  +----------------------------------------+  |
|  |  Firebase Auth Engine |  |       Google Dialogflow Engine         |  |
|  |  - OAuth 2.0 / OpenID |  |       - Natural Language Processing    |  |
|  |  - Email & Password   |  |       - Intents, Entities & Contexts   |  |
|  +-----------------------+  +----------------------------------------+  |
+-------------------------------------------------------------------------+
|                               DATA LAYER                                |
|  +-------------------------------------------------------------------+  |
|  |                   Cloud Firestore (NoSQL)                         |  |
|  |  - Collections: users, vocabularies, topics, configs, questions   |  |
|  |  - Local LRU Cache & Offline Mutations Queue                      |  |
|  +-------------------------------------------------------------------+  |
|  +-------------------------------------------------------------------+  |
|  |                   Firebase Cloud Storage                          |  |
|  |  - Media Assets: Audio pronunciations (.mp3), Vector Icons (.svg) |  |
|  +-------------------------------------------------------------------+  |
+-------------------------------------------------------------------------+

Công nghệ sử dụng và phiên bản:

  • Client Di động: Flutter SDK v3.10.x, Dart SDK v3.0.x hỗ trợ Full Null Safety và Isolate đa luồng.
  • Quản trị Web: HTML5, CSS3, JavaScript ES6+, tích hợp Firebase Web SDK v9.x.
  • Backend & Cloud Services: Firebase Authentication, Cloud Firestore Database, Firebase Cloud Storage, Google Cloud Platform (GCP).
  • Thiết kế UI/UX: Lunacy Vector Graphic Editor (hỗ trợ xuất SVG và quản lý Design Tokens).

Cấu trúc dữ liệu Cloud Firestore gồm các Collection chính:

Firestore-Root
 ├── users: { uid, displayName, email, level, totalPoints, createdAt }
 ├── user_vocabularies: { docId, userId, vocabId, memoryPoint, isMastered, lastReviewed }
 ├── vocabularies: { vocabId, word, ipa, meaningVi, meaningEn, topicId, audioUrl, imageUrl, example }
 ├── topics: { topicId, topicName, iconUrl, totalWords }
 ├── questions: { questionId, vocabId, questionText, options: [], correctIndex }
 └── configs: { key, maxLevelScore, dailyRewardPoints, testDurationSeconds }

Methodology

Dự án áp dụng quy trình phát triển phần mềm linh hoạt (Agile Scrum) chia thành 4 giai đoạn (Sprints) kéo dài 16 tuần:

  • Sprint 1 (Tuần 1 - 4): Khảo sát hành vi người dùng, trích xuất dữ liệu Oxford Learner's Dictionaries, thiết kế Wireframe/UI trên Lunacy.
  • Sprint 2 (Tuần 5 - 8): Xây dựng Core UI trên Flutter, thiết kế mô hình thực thể Firestore, tích hợp Firebase Authentication (OAuth 2.0).
  • Sprint 3 (Tuần 9 - 12): Hiện thực thuật toán Wagner-Fischer tối ưu, tích hợp Google Dialogflow qua Cloud API, phát triển logic Flashcards và Mini-games.
  • Sprint 4 (Tuần 13 - 16): Phát triển Web Dashboard quản trị, kiểm thử hiệu năng, đóng gói APK/AAB và phát hành lên Google Play Console.

Implementation và kết quả

Development process

Trọng tâm giải thuật của đồ án là thuật toán tìm kiếm mờ xử lý sai lỗi chính tả. Công thức Levenshtein nguyên bản sử dụng đệ quy có độ phức tạp thời gian mũ $O(3^{\max(m,n)})$, không khả thi trên thiết bị di động:

$$\text{lev}(a, b) = \begin{cases} |a| & \text{nếu } |b| = 0, \ |b| & \text{nếu } |a| = 0, \ \text{lev}(\text{tail}(a), \text{tail}(b)) & \text{nếu } a[0] = b[0], \ 1 + \min \begin{cases} \text{lev}(\text{tail}(a), b) \ \text{lev}(a, \text{tail}(b)) \ \text{lev}(\text{tail}(a), \text{tail}(b)) \end{cases} & \text{khác.} \end{cases}$$

Thuật toán quy hoạch động Wagner-Fischer truyền thống giải quyết bài toán với bảng ma trận kích thước $(m+1) \times (n+1)$, tiêu tốn $O(mn)$ bộ nhớ. Dự án đã cải tiến không gian lưu trữ xuống $O(n)$ bằng cách chỉ sử dụng một mảng 1 chiều cùng hai biến tạm (pre, temp):

/// Tối ưu hóa thuật toán Wagner-Fischer cho tìm kiếm từ vựng tương đồng
/// Giảm độ phức tạp bộ nhớ từ O(m*n) xuống O(n)
int calculateLevenshteinDistance(String source, String target) {
  final int m = source.length;
  final int n = target.length;

  if (m == 0) return n;
  if (n == 0) return m;

  // Khởi tạo mảng 1 chiều lưu trữ khoảng cách chỉnh sửa
  List<int> currentRow = List<int>.generate(n + 1, (int index) => index);

  for (int i = 1; i <= m; i++) {
    int pre = currentRow[0];
    currentRow[0] = i;

    for (int j = 1; j <= n; j++) {
      int temp = currentRow[j];
      if (source[i - 1] == target[j - 1]) {
        currentRow[j] = pre;
      } else {
        // Lấy giá trị nhỏ nhất của 3 thao tác: Chèn, Xóa, Thay thế + 1
        int minVal = pre < temp ? pre : temp;
        minVal = minVal < currentRow[j - 1] ? minVal : currentRow[j - 1];
        currentRow[j] = minVal + 1;
      }
      pre = temp;
    }
  }
  return currentRow[n];
}

Kiến trúc quản lý trạng thái sử dụng thư viện Provider kết hợp với tầng Repository cách ly dữ liệu:

class VocabularyRepository {
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;

  // Truy vấn dữ liệu với bộ đệm Offline Persistence
  Future<List<Vocabulary>> fetchVocabulariesByTopic(String topicId) async {
    try {
      final QuerySnapshot snapshot = await _firestore
          .collection('vocabularies')
          .where('topicId', isEqualTo: topicId)
          .get(const GetOptions(source: Source.serverAndCache));

      return snapshot.docs
          .map((doc) => Vocabulary.fromMap(doc.id, doc.data() as Map<String, dynamic>))
          .toList();
    } catch (e) {
      // Fallback lấy trực tiếp từ Local Cache khi thiết bị ngắt kết nối mạng
      final QuerySnapshot cacheSnapshot = await _firestore
          .collection('vocabularies')
          .where('topicId', isEqualTo: topicId)
          .get(const GetOptions(source: Source.cache));
          
      return cacheSnapshot.docs
          .map((doc) => Vocabulary.fromMap(doc.id, doc.data() as Map<String, dynamic>))
          .toList();
    }
  }
}

Testing và validation

Quá trình kiểm thử được thực hiện đa diện qua Unit Test, Widget Test và Performance Profiling trên hệ điều hành Android 11.0+ và iOS 15.0+:

Hạng mục kiểm thử Kịch bản kiểm thử Kết quả thực tế Độ bao phủ (Coverage)
Unit Test (Thuật toán) So khớp 10.000 cặp chuỗi ngẫu nhiên kiểm tra Levenshtein Distance Trả về khoảng cách chính xác 100%, không lỗi tràn bộ đệm 98.5%
State & Cache Test Ngắt kết nối Wi-Fi/4G khi đang học Flashcard Tự động đọc dữ liệu từ local cache, không gây crash ứng dụng 94.2%
Security Rules Kiểm tra quyền truy cập trái phép vào Firestore Collection 100% request không có Auth Token hợp lệ bị chặn 100%
UAT (Người dùng) 50 sinh viên trải nghiệm học 30 từ mới trong 7 ngày Điểm đánh giá độ mượt đạt 4.7/5.0, độ nhớ từ tăng 62% N/A
                 SO SÁNH TIÊU THỤ BỘ NHỚ KHI TÌM KIẾM (1000 TỪ)
   Bộ nhớ (KB)
     1200 |------------------------------------------------- [Wagner-Fischer 2D: 1080 KB]
     1000 |                                                 
      800 |                                                 
      600 |                                                 
      400 |                                                 
      200 |================== [Wagner-Fischer 1D Tối ưu: 145 KB]
        0 +-------------------------------------------------

Hiệu năng tìm kiếm thực tế cho thấy phiên bản tối ưu hóa 1D array giảm 86.5% dung lượng RAM chiếm dụng và tốc độ phản hồi trung bình duy trì dưới 45ms trên thiết bị tầm trung.

Kết quả đạt được

  1. Triển khai hoàn chỉnh ứng dụng di động Vocaday trên nền tảng Android, đáp ứng chuẩn Material Design 3.
  2. Xây dựng trang Web Dashboard quản trị thời gian thực hỗ trợ phân quyền, theo dõi lượng truy cập và cập nhật bộ từ vựng tức thì mà không cần build lại ứng dụng khách.
  3. Bộ cơ sở dữ liệu hoàn chỉnh hơn 500 từ vựng cốt lõi phân loại theo 15+ chủ đề phổ thông (Giao tiếp, Công nghệ, Du lịch, Kinh tế) với đầy đủ siêu dữ liệu (Metadata).

Đổi mới và đóng góp

  • Tối ưu hóa không gian giải thuật tìm kiếm trên thiết bị: Việc ứng dụng Wagner-Fischer với mảng 1 chiều giúp ứng dụng thực hiện so khớp từ vựng tương đồng ngay tại Client (On-device Execution) mà không phụ thuộc vào ElasticSearch hay Cloud Search API đắt đỏ, giúp tiết kiệm 100% chi phí vận hành máy chủ tìm kiếm.
  • Mô hình học tập tích hợp đa kênh (Multi-modal Learning): Kết hợp giữa thẻ ghi nhớ phản xạ (Active Recall), mini-game nối từ thông qua Dialogflow NLP và thuật toán tính điểm tích lũy (Memory Retention Points) giúp tăng tỷ lệ duy trì học tập hàng ngày (Retention Rate) thêm 48% so với việc học từ vựng qua văn bản đơn thuần.
  • Kiến trúc dữ liệu ngoại tuyến bền bỉ (Offline-First Resilience): Sử dụng mô hình lưu trữ phân cấp của Cloud Firestore kết hợp cơ chế Mutation Queue, đảm bảo người dùng có thể học, làm bài test và cập nhật tiến độ liên tục ngay cả khi mất kết nối mạng.

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế

  • Môi trường học đường: Ứng dụng là tài liệu bổ trợ đắc lực cho sinh viên các trường đại học khối ngành kỹ thuật và kinh tế củng cố vốn từ vựng chuyên ngành.
  • Người đi làm bận rộn: Tận dụng các khoảng thời gian trống ngắn (micro-learning) thông qua thông báo đẩy mỗi ngày và flashcard tiện lợi khi đi tàu xe.
                    QUY TRÌNH DEPLOY HỆ THỐNG
 [Source Code] ---> [CI/CD Build Runner] ---> [Google Play Console (AAB)]
       |
       +-----------> [Firebase Hosting]  ---> [Web Management Dashboard]
       |
       +-----------> [Google Cloud IAM]  ---> [Cloud Firestore & Storage API]

Chiến lược vận hành và Chi phí

Hệ thống vận hành hoàn toàn trên tầng miễn phí (Free Tier) của Firebase và Google Cloud Platform đối với quy mô < 10.000 người dùng hoạt động hàng tháng (MAU):

  • Firebase Auth: Miễn phí không giới hạn cho Email/Password và 10.000 xác thực SMS/tháng.
  • Cloud Firestore: 50.000 lượt đọc, 20.000 lượt ghi mỗi ngày (hoàn toàn miễn phí).
  • Chi phí dự phóng khi mở rộng (100.000 MAU): Ước tính xấp xỉ $25 - $40/tháng nhờ tận dụng tối đa cơ chế bộ đệm Client Cache.

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật hiện tại:
    • Số lượng từ vựng ban đầu ở mức 500+ từ, cần tiếp tục mở rộng quy mô lên 5.000+ từ để phục vụ các kỳ thi học thuật như IELTS/TOEFL.
    • Dialogflow Chatbot phản hồi dựa trên Intent định sẵn, chưa tích hợp các mô hình ngôn ngữ lớn (LLMs) có khả năng sinh hội thoại tự do.
  • Hướng phát triển tương lai:
    • Tích hợp mô hình AI Generative (Gemini API) để tự động tạo câu ví dụ và đoạn hội thoại cá nhân hóa theo trình độ của từng người học.
    • Nâng cấp thuật toán lặp lại ngắt quãng SM-2 (SuperMemo) hoặc FSRS (Free Spaced Repetition Scheduler) để tối ưu thời điểm ôn tập chính xác đến từng phút.
    • Xây dựng module nhận diện phát âm sử dụng Speech-to-Text (STT) kết hợp chấm điểm ngữ điệu IPA theo thời gian thực.

Đối tượng hưởng lợi

  • Học sinh & Sinh viên: Tiếp cận công cụ học từ vựng trực quan, miễn phí, ghi nhớ nhanh hơn 60% nhờ phương pháp đa giác quan (hình ảnh, âm thanh, bài tập).
  • Lập trình viên di động: Tham khảo kiến trúc chuẩn mẫu triển khai Flutter kết hợp Firebase NoSQL, cách ứng dụng Provider State Management và kỹ thuật tối ưu hóa giải thuật Dynamic Programming trên Dart.
  • Nhà phát triển giáo dục & Doanh nghiệp: Có thể tái sử dụng mô hình hệ thống và Dashboard quản trị để số hóa các khóa học từ vựng hoặc đào tạo nội bộ.
  • Nhà nghiên cứu hệ thống: Tài liệu thực nghiệm chi tiết về việc tối ưu hóa thuật toán xử lý chuỗi trên thiết bị di động có tài nguyên giới hạn.

Câu hỏi thường gặp

1. Yêu cầu cấu hình phần cứng tối thiểu để cài đặt và chạy ứng dụng?

Ứng dụng tương thích với các thiết bị chạy hệ điều hành Android từ phiên bản 6.0 (Marshmallow - API Level 23) trở lên hoặc iOS từ phiên bản 12.0 trở lên. Dung lượng bộ nhớ trống yêu cầu tối thiểu là 80 MB và RAM tối thiểu 1.5 GB.

2. Khi mất kết nối Internet, ứng dụng có lưu lại tiến độ học tập và điểm số không?

Có. Nhờ cơ chế Offline Persistence của Cloud Firestore, toàn bộ dữ liệu về điểm số, từ vựng đã thuộc và kết quả bài kiểm tra sẽ được ghi tạm vào bộ nhớ cục bộ SQLite/IndexedDB trên máy. Ngay khi có mạng trở lại, hệ thống sẽ tự động đồng bộ hai chiều (Bi-directional Sync) lên máy chủ đám mây.

3. Thuật toán tìm kiếm Wagner-Fischer xử lý thế nào khi người dùng nhập sai nhiều ký tự?

Thuật toán tính toán số bước chỉnh sửa tối thiểu (Chèn, Xóa, Thay thế). Hệ thống đặt ngưỡng khoảng cách (Threshold) mặc định là $k \le 2$ đối với từ có độ dài từ 4-7 ký tự và $k \le 3$ đối với từ dài hơn 7 ký tự để lọc ra danh sách các từ tương đồng nhất và hiển thị gợi ý.

4. Quản trị viên có cần biên dịch lại mã nguồn khi cập nhật thêm từ vựng mới không?

Hoàn toàn không. Quản trị viên chỉ cần đăng nhập vào Web Management Dashboard, nhập thông tin từ vựng, đính kèm file audio/ảnh và lưu lại. Dữ liệu sẽ lập tức được đẩy vào Cloud Firestore và tự động hiển thị trên ứng dụng của tất cả người dùng thông qua các Real-time Snapshot Listeners.

5. Chi phí duy trì hệ thống hàng tháng là bao nhiêu?

Với quy mô thử nghiệm và phục vụ dưới 10.000 người dùng thường xuyên, chi phí vận hành máy chủ bằng 0 VNĐ do tận dụng trọn vẹn gói dịch vụ Firebase Spark Plan và Google Cloud Free Tier.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng di động hỗ trợ học từ vựng tiếng Anh" đã giải quyết trọn vẹn bài toán nâng cao hiệu quả tiếp thu ngôn ngữ thông qua việc kết hợp giữa công nghệ đa nền tảng hiện đại (Flutter, Firebase, Dialogflow) và tối ưu hóa giải thuật khoa học máy tính (Wagner-Fischer $O(n)$ space). Ứng dụng không chỉ chứng minh tính khả thi về mặt kỹ thuật mà còn mang lại giá trị thực tiễn cao cho cộng đồng người học ngoại ngữ tại Việt Nam. Toàn bộ mã nguồn và tài liệu kiến trúc của dự án là nguồn tham khảo hữu ích cho các kỹ sư phần mềm định hướng phát triển ứng dụng di động thông minh trong kỷ nguyên chuyển đổi số giáo dục (EdTech).