word rarity bias parameter
This commit is contained in:
parent
3d434a570c
commit
25e617c6de
|
@ -1,10 +1,6 @@
|
||||||
import { db } from "./db.mjs"
|
import { db } from "./db.mjs"
|
||||||
import { randomSkewNormal, randomSkewNormalTrimmed } from "./skewNormal.mjs"
|
|
||||||
|
|
||||||
const maxCount = 30000000
|
export default async function getNewPrompt({minCount = 200000, maxCount = 30000000, rarity}) {
|
||||||
const minCount = 200000
|
|
||||||
|
|
||||||
export default async function getNewPrompt() {
|
|
||||||
const badWords = await db('bad_words')
|
const badWords = await db('bad_words')
|
||||||
.select('word')
|
.select('word')
|
||||||
|
|
||||||
|
@ -18,24 +14,32 @@ export default async function getNewPrompt() {
|
||||||
.andWhere('count', '>', minCount)
|
.andWhere('count', '>', minCount)
|
||||||
.andWhere('word', 'not in', badWords)
|
.andWhere('word', 'not in', badWords)
|
||||||
.whereNotNull('pronunciation')
|
.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 randomEntry = (array) => {
|
||||||
//const random = (randomSkewNormal(Math.random,0,2,0)/6)
|
const random = getBiasedRng(0,1,rarity,1)
|
||||||
const random = Math.random()
|
const mix = Math.random()
|
||||||
|
console.log("RANDOM: "+random)
|
||||||
return array[
|
return array[
|
||||||
parseInt(
|
parseInt(
|
||||||
array.length * random
|
array.length * random
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
db.destroy()
|
db.destroy()
|
||||||
return randomEntry(prompts)
|
return randomEntry(prompts).count
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
console.log(await getNewPrompt())
|
console.log(await getNewPrompt({rarity:1}))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue