Language translator

habeebahmed

habeebahmed

Posted on April 6, 2023

Language translator

Disclaimer: This blog post is written with the help from ChatGPT

We shall be building a simple language translator using existing trained models.

Tech stack: Python, NextJS, Azure, AKS.

To build a simple web application for language translation using the given tech stack, you can follow these steps:

Set up the backend (Python) with FastAPI.

  • Install FastAPI and Uvicorn.
pip install fastapi
pip install uvicorn
Enter fullscreen mode Exit fullscreen mode
  • Create a file named main.py with the following content:
from fastapi import FastAPI
import requests

app = FastAPI()

@app.post("/translate/")
async def translate(text: str, source_lang: str, target_lang: str):
    # Your translation model code
    translated_text = translate_text(text, source_lang, target_lang)
    return {"translated_text": translated_text}

def translate_text(text, source_lang, target_lang):
    # Implement your translation model here
    # For example, you can use the `transformers` library from Hugging Face
    # or any other translation model
    return "Translated text"
Enter fullscreen mode Exit fullscreen mode

Set up the frontend (NextJS).

  • Install NextJS:
npx create-next-app frontend
cd frontend
Enter fullscreen mode Exit fullscreen mode
  • Install the necessary libraries:
npm install axios
Enter fullscreen mode Exit fullscreen mode
  • Create a file named pages/index.js with the following content:
import { useState } from "react";
import axios from "axios";

export default function Home() {
  const [text, setText] = useState("");
  const [sourceLang, setSourceLang] = useState("en");
  const [targetLang, setTargetLang] = useState("es");
  const [translatedText, setTranslatedText] = useState("");

  const handleSubmit = async (e) => {
    e.preventDefault();
    const res = await axios.post("/api/translate", {
      text,
      source_lang: sourceLang,
      target_lang: targetLang,
    });
    setTranslatedText(res.data.translated_text);
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <textarea onChange={(e) => setText(e.target.value)} value={text} />
        <select onChange={(e) => setSourceLang(e.target.value)} value={sourceLang}>
          {/* Add your language options here */}
          <option value="en">English</option>
          <option value="es">Spanish</option>
        </select>
        <select onChange={(e) => setTargetLang(e.target.value)} value={targetLang}>
          {/* Add your language options here */}
          <option value="en">English</option>
          <option value="es">Spanish</option>
        </select>
        <button type="submit">Translate</button>
      </form>
      <p>{translatedText}</p>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Set up the database (MongoDB).

  • Install the necessary libraries:
pip install pymongo
pip install motor
Enter fullscreen mode Exit fullscreen mode
  • In main.py, add the following code to set up the database:
from motor.motor_asyncio import AsyncIOMotorClient

async def get_db():
    client = AsyncIOMotorClient("mongodb://username:password@your_mongodb_server:27017/your_db_name")
    return client.your_db_name
Enter fullscreen mode Exit fullscreen mode

Deploy the backend and frontend using Azure Kubernetes Service (AKS).

First, create a container for both the frontend and backend applications. Create a Dockerfile for each application with the following content:

For the backend:

# Dockerfile
Copy code
FROM python:3.9

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Enter fullscreen mode Exit fullscreen mode
  • For the frontend:
# Dockerfile
FROM node:14

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

RUN npm run build

EXPOSE 3000

CMD ["npm", "start"]
Enter fullscreen mode Exit fullscreen mode

Build the Docker images:

# For backend
docker build -t your_dockerhub_username/backend .

# For frontend
docker build -t your_dockerhub_username/frontend .
Push the Docker images to Docker Hub:
Enter fullscreen mode Exit fullscreen mode
# For backend
docker push your_dockerhub_username/backend

# For frontend
docker push your_dockerhub_username/frontend
Enter fullscreen mode Exit fullscreen mode

Next, set up your Kubernetes cluster in AKS. Follow the Azure documentation to create and connect to the cluster: https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough

  • Create a kustomization.yaml file to define the Kubernetes resources:
resources:
  - backend-deployment.yaml
  - frontend-deployment.yaml
  - backend-service.yaml
  - frontend-service.yaml
Enter fullscreen mode Exit fullscreen mode
  • Create the following YAML files to define the deployments and services for the backend and frontend:

backend-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend
          image: your_dockerhub_username/backend
          ports:
            - containerPort: 8000
Enter fullscreen mode Exit fullscreen mode

frontend-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend
          image: your_dockerhub_username/frontend
          ports:
            - containerPort: 3000
Enter fullscreen mode Exit fullscreen mode

backend-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 8000
  type: LoadBalancer
Enter fullscreen mode Exit fullscreen mode

frontend-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  selector:
    app: frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: LoadBalancer
Enter fullscreen mode Exit fullscreen mode

Apply the Kubernetes configuration:

kubectl apply -k .
Enter fullscreen mode Exit fullscreen mode

Once the services are running, use the frontend service's external IP address to access the web application.

This should give us a basic language translation web application using Python, NextJS, MongoDB, and Azure Kubernetes Service (AKS).

Improve the translation model

Currently, the translation model is just a placeholder. We can use the transformers library from Hugging Face to implement a more sophisticated translation model. For example, we can use the MarianMTModel and MarianTokenizer for translation:

from transformers import MarianMTModel, MarianTokenizer

model_name = "Helsinki-NLP/opus-mt-{src}-{tgt}"
tokenizer = MarianTokenizer.from_pretrained(model_name.format(src=source_lang, tgt=target_lang))
model = MarianMTModel.from_pretrained(model_name.format(src=source_lang, tgt=target_lang))

def translate_text(text, source_lang, target_lang):
    inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
    translated = model.generate(**inputs)
    return tokenizer.decode(translated[0], skip_special_tokens=True)
Enter fullscreen mode Exit fullscreen mode
  • Remember to install the transformers library:
pip install transformers
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
habeebahmed
habeebahmed

Posted on April 6, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Language translator
python Language translator

April 6, 2023