word rarity bias parameter

This commit is contained in:
Andrzej Stepien 2023-08-07 00:59:24 +02:00
parent 3d434a570c
commit 25e617c6de
2 changed files with 15 additions and 40 deletions

View File

@ -1,10 +1,6 @@
import { db } from "./db.mjs"
import { randomSkewNormal, randomSkewNormalTrimmed } from "./skewNormal.mjs"
const maxCount = 30000000
const minCount = 200000
export default async function getNewPrompt() {
export default async function getNewPrompt({minCount = 200000, maxCount = 30000000, rarity}) {
const badWords = await db('bad_words')
.select('word')
@ -18,24 +14,32 @@ export default async function getNewPrompt() {
.andWhere('count', '>', minCount)
.andWhere('word', 'not in', badWords)
.whereNotNull('pronunciation')
.orderBy('count')
.orderByRaw('count desc')
const getBiasedRng = (min,max,bias,influence) => {
const random = Math.random() * (max - min) + min
const mix = Math.random() * influence
return random * (1-mix) + bias * mix
}
const randomEntry = (array) => {
//const random = (randomSkewNormal(Math.random,0,2,0)/6)
const random = Math.random()
const random = getBiasedRng(0,1,rarity,1)
const mix = Math.random()
console.log("RANDOM: "+random)
return array[
parseInt(
array.length * random
)
]
}
db.destroy()
return randomEntry(prompts)
return randomEntry(prompts).count
}
console.log(await getNewPrompt())
console.log(await getNewPrompt({rarity:1}))

View File

@ -1,29 +0,0 @@
const randomNormals = (rng) => {
let u1 = 0, u2 = 0;
//Convert [0,1) to (0,1)
while (u1 === 0) u1 = rng();
while (u2 === 0) u2 = rng();
const R = Math.sqrt(-2.0 * Math.log(u1));
const Θ = 2.0 * Math.PI * u2;
return [R * Math.cos(Θ), R * Math.sin(Θ)];
}
export const randomSkewNormal = (rng, ξ, ω, α = 0) => {
const [u0, v] = randomNormals(rng);
if (α === 0) {
return ξ + ω * u0;
}
const 𝛿 = α / Math.sqrt(1 + α * α);
const u1 = 𝛿 * u0 + Math.sqrt(1 - 𝛿 * 𝛿) * v;
const z = u0 >= 0 ? u1 : -u1;
return ξ + ω * z;
}
export const randomSkewNormalTrimmed = ()=>{
let random = 1
do {
random = randomSkewNormal(Math.random,0,2,0)
} while (random<0 || random>0.999999)
return random
}